spring boot项目如何增加过滤器呢?
下文笔者讲述SpringBoot增加过滤器的方法分享,如下所示
实现思路: 我们只需继承Filter,编写自己的过滤器 然后则过滤器会被加入到SpringBoot中 并起到相应的作用例
import com.google.gson.Gson; import org.springframework.beans.factory.annotation.Autowired; 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.OutputStreamWriter; import java.io.PrintWriter; import java.io.UnsupportedEncodingException; import java.util.Enumeration; import java.util.Map; import java.util.logging.Level; import java.util.logging.Logger; @Component public class ApiFilter implements Filter { private Logger LOG = Logger.getLogger(ApiFilter.class.getName()); @Autowired private ApiService ApiService; @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { // chain.doFilter(request,response); // ResponseEntity<Map<String,Object>> resr = null; HttpServletRequest httpRequest = (HttpServletRequest) request; HttpServletResponse httpResponse = (HttpServletResponse) response; String uri = httpRequest.getRequestURI(); MyHttpServletRequestWrapper requestWrapper = new MyHttpServletRequestWrapper((HttpServletRequest) request); httpResponse.setCharacterEncoding("UTF-8"); httpResponse.setContentType("application/json; charset=utf-8"); String method = httpRequest.getMethod(); LOG.log(Level.INFO,"================request mathod is "+ method); LOG.log(Level.INFO,"================request mathod is "+ uri); if(method.equals("OPTIONS")){ chain.doFilter(request,response); }else { if(uri.contains("/clpcApi") ){ String responseMsg = ""; String responseCod = "3001"; int statusCode = 403; boolean flag = false; Enumeration<String> headersNames = httpRequest.getHeaderNames(); while(headersNames.hasMoreElements()){ String element = headersNames.nextElement(); LOG.log(Level.INFO,"================request header "+element+" is "+ httpRequest.getHeader(element)); } // LOG.log(Level.INFO,"================request header headersNames is "+ gson.toJson(headersNames)); ResponseEntity responseEntity = new ResponseEntity(); String VendorsID = httpRequest.getHeader("VendorsID"); String EncryptType = httpRequest.getHeader("EncryptType"); String Sign = httpRequest.getHeader("Sign"); String Timestamp = httpRequest.getHeader("Timestamp"); LOG.log(Level.INFO,"================request header VendorsID is "+ VendorsID); LOG.log(Level.INFO,"================request header EncryptType is "+ EncryptType); LOG.log(Level.INFO,"================request header Sign is "+ Sign); LOG.log(Level.INFO,"================request header Timestamp is "+ Timestamp); if(Tools.checkValue(Sign)){ String userStr = ApiService.checkSign(Sign);//验证签名 if(userStr==null){ responseMsg = "无调用权限!"; }else{ if (Tools.checkNullValue(VendorsID)){ // responseMsg = "Request header No VendorsID!"; statusCode = 401; responseMsg = "验签失败!"; }else if(Tools.checkNullValue(EncryptType)){ // responseMsg = "Request header No EncryptType!"; statusCode = 401; responseMsg = "验签失败!"; }else if(Tools.checkNullValue(Timestamp)){ // responseMsg = "Request header No Timestamp!"; responseMsg = "验签失败!"; statusCode = 401; }else{ flag = true; } } } else { responseMsg = "验签失败!"; statusCode = 401; } responseEntity.setRsCode(responseCod); responseEntity.setRsDesc(responseMsg); PrintWriter writer = null; OutputStreamWriter osw = null; if(flag){ chain.doFilter(requestWrapper, response); }else{ try { ((HttpServletResponse) response).setStatus(statusCode); //response.set osw = new OutputStreamWriter(response.getOutputStream(),"UTF-8"); writer = new PrintWriter(osw, true); String jsonStr = new Gson().toJson(responseEntity); writer.write(jsonStr); writer.flush(); writer.close(); osw.close(); } catch (UnsupportedEncodingException e) { LOG.log(Level.INFO,"过滤器返回信息失败:" + e.getMessage(), e); } catch (IOException e) { LOG.log(Level.INFO,"过滤器返回信息失败:" + e.getMessage(), e); } finally { if (null != writer) { writer.close(); } if (null != osw) { osw.close(); } } } }else if(uri.contains("/swagger-ui")){ chain.doFilter(requestWrapper, response); }else { chain.doFilter(requestWrapper, response); } } } @Override public void init(FilterConfig filterConfig) throws ServletException { System.out.println("AllianzAPIFilter init============================================"); } @Override public void destroy() { System.out.println("AllianzAPIFilter destroy============================================"); } }
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。