過濾器實現只對controller層進行過濾
阿新 • • 發佈:2018-12-30
1、controller層的請求都已.do結束
package com.example.demo.controller; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiOperation; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController; @RestController @Api("SampleController相關的api") public class SampleController { @ApiOperation(value = "home", notes = "home") @ApiImplicitParam(name = "name", value = "姓名", required = true, dataType = "String") @RequestMapping(value = "/home.do",method = RequestMethod.GET) public String home(String name) { String result="controller:Hello " + name; System.out.println(""); return result; } }
2、過濾器中新增判斷
package com.example.demo.filter; import com.example.demo.wrapper.ResponseWrapper; import org.apache.commons.lang.StringUtils; import org.springframework.http.MediaType; import org.springframework.stereotype.Component; import javax.servlet.*; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.OutputStream; import java.io.PrintWriter; @Component public class ResponseFilter implements Filter { @Override public void init(FilterConfig filterConfig) throws ServletException { } @Override public void destroy() { } @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { HttpServletRequest request = (HttpServletRequest) servletRequest; String URL = request.getRequestURL().toString(); if (URL.indexOf(".do")<0) { filterChain.doFilter(servletRequest, servletResponse); } else { ResponseWrapper responseWrapper = new ResponseWrapper((HttpServletResponse) servletResponse); filterChain.doFilter(servletRequest, responseWrapper); String contentType = responseWrapper.getContentType(); byte[] content = responseWrapper.getResponseData(); String str = ""; if (StringUtils.isNotBlank(contentType) && (contentType.contains(MediaType.APPLICATION_JSON_VALUE) || contentType.contains(MediaType.TEXT_HTML_VALUE))) { str = new String(content); str = str + "加密"; System.out.println("filter:" + str); HttpServletResponse response = (HttpServletResponse) servletResponse; writeResponse(response, 200, str); } } } public static void writeResponse(HttpServletResponse response, int status, String json) { try { response.reset();//很重要 response.setHeader("Access-Control-Allow-Origin", "*"); response.setHeader("Access-Control-Allow-Methods", "*"); response.setContentType("application/json;charset=UTF-8"); response.setStatus(status); response.getWriter().write(json); } catch (IOException e) { e.printStackTrace(); } } }