<!-- AuthFilter --> <filter> <filter-name>authFilter</filter-name> <filter-class>com.crm.filter.AuthFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>utf-8</param-value> </init-param> </filter> <filter-mapping> <filter-name>authFilter</filter-name> <url-pattern>/crm/*</url-pattern> </filter-mapping>
2. Filter class
import java.io.IOException; import java.io.PrintWriter; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.ApplicationContext; import org.springframework.web.context.support.WebApplicationContextUtils; import com.alibaba.fastjson.JSONObject; /** * Permission check filter */ public class AuthFilter implements Filter{ private static final Logger logger = LoggerFactory.getLogger(AuthFilter.class); private CrmService crmService; private static String encoding;//Cannot be modified with final @Override public void init(FilterConfig filterConfig) throws ServletException { String logStr="AuthFilter.init..."; encoding=filterConfig.getInitParameter("encoding"); logger.info(logStr+"initialize encoding="+encoding); //Filter cannot directly obtain the service in spring //The crmService cannot be injected with annotations, and the print log is as follows: "AuthFilter.doFilter...Filter processing, commonService=null" ApplicationContext context=WebApplicationContextUtils.getRequiredWebApplicationContext(filterConfig.getServletContext()); crmService=(CrmService) context.getBean("crmService"); } @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { String logStr="AuthFilter.doFilter..."; logger.info(logStr+"Filtering"); HttpServletRequest request=(HttpServletRequest) servletRequest; HttpServletResponse response=(HttpServletResponse) servletResponse; request.setCharacterEncoding(encoding); // PrintWriter out=null; try{ UserInfo userInfo=crmService.validateMethod(request); logger.info(logStr+String.format("Passed the filter check: token=%s, servletPath=%s, uri=%s, url=%s", request.getHeader("TOKEN_KEY_NAME_DEMO"),request.getServletPath( ),request.getRequestURI(),request.getRequestURL()));//serveletPath not available request.setAttribute("CRM_REQUEST_USERINFO_DEMO", userInfo); filterChain.doFilter(request, response); }catch(DemoValidateException e){ // public check exception logger.error(logStr+"Interface public verification exception"); BaseResponse rsp = new BaseResponse (); rsp.setErrCode(e.getCode()); rsp.setErrMsg(e.getMessage()); //response response.setContentType("application/json"); response.setCharacterEncoding(encoding); out = response.getWriter(); out.print(JSONObject.toJSONString(rsp)); logger.info(logStr+String.format("Filter verification failed: token=%s, rsp=%s", request.getHeader("TOKEN_KEY_NAME_DEMO"),JSONObject.toJSONString(rsp))); out.flush(); }finally { if(null!=out){ out.close(); } } } @Override public void destroy() { String logStr="AuthFilter.destroy..."; logger.info(logStr+"destruction filter"); } }