The javax.servlet.Filter filter implements the effect of the SpringMvc interceptor Interceptor

1. Configure Filter
<!-- 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");
		
	}

}

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=326261593&siteId=291194637