<!-- 测试公共校验拦截器 --> <mvc:interceptors> <mvc:interceptor> <mvc:mapping path="/crm/**"/> <mvc:exclude-mapping path="*/crm/resource/download,*/crm/home/homeInit"/> <bean class="com.test.interceptor.DemoInterceptor"/> </mvc:interceptor> </mvc:interceptors>
import java.io.PrintWriter; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.handler.HandlerInterceptorAdapter; import com.alibaba.fastjson.JSONObject; import com.test.exception.DemoValidateException; import com.test.common.PublicResponse; import com.test.bean.UserInfo; import com.test.service.CrmService; /** * 测试公共校验拦截器 */ public class DemoInterceptor extends HandlerInterceptorAdapter { private static final Log logger = LogFactory.getLog(DemoInterceptor.class); @Autowired private CrmService crmService; /** * 在业务处理器处理请求之前被调用 */ @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { PrintWriter out=null; String logStr="DemoInterceptor.preHandle..."; logger.info(logStr+"拦截器preHandle方法"); try{ UserInfo userInfo=crmService.validateMethod(request); logger.info(logStr+String.format("拦截校验通过:token=%s, servletPath=%s, uri=%s, url=%s", request.getHeader("TOKEN_KEY_NAME_DEMO"),request.getServletPath(),request.getRequestURI(),request.getRequestURL())); /* 打印结果: token=CEEADEC1C6591A84E08DCE54136608BC3, servletPath=, //取不到 uri=/crm/stu/init, url=http://192.168.12.100:9898/crm/stu/init */ request.setAttribute("CRM_REQUEST_USERINFO_DEMO", userInfo); return true; }catch(DemoValidateException e){ logger.error(logStr+"公共校验异常"); PublicResponse rsp=new PublicResponse(); rsp.setRspCode(e.getCode()); rsp.setRspMsg(e.getMessage()); response.setContentType("application/json"); response.setCharacterEncoding("UTF-8"); out = response.getWriter(); out.print(JSONObject.toJSONString(rsp)); logger.info(logStr+String.format("拦截校验未通过:token=%s, rsp=%s", request.getHeader("TOKEN_KEY_NAME_DEMO"),JSONObject.toJSONString(rsp))); out.flush(); }finally { if(null!=out){ out.close(); } } return false; } /** * 在业务处理器处理请求完成之后,生成视图之前执行 */ @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { String logStr="DemoInterceptor.postHandle..."; logger.info(logStr+"拦截器postHandle方法"); super.postHandle(request, response, handler, modelAndView); } /** * 在DispatcherServlet完全处理完请求之后被调用,可用于清理资源 */ @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { super.afterCompletion(request, response, handler, ex); } /** * 处理异步请求(当Controller中有异步请求方法的时候会触发该方法) */ @Override public void afterConcurrentHandlingStarted(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { super.afterConcurrentHandlingStarted(request, response, handler); } }
@RequestMapping(value = "/stu/init", method = RequestMethod.GET) @ResponseBody public PublicResponse testControllerMethod(final HttpServletRequest request, final HttpServletResponse response){ PublicResponse rsp=new PublicResponse(); //add code here try{ //从拦截器过来的request中获取UserInfo UserInfo stu=(UserInfo)request.getAttribute("CRM_REQUEST_USERINFO_DEMO"); logger.info(logStr+"测试stu="+stu.toString()); }catch(Exception e){ e.printStackTrace(); logger.error("接口异常"); } logger.info("接口响应rsp="+rsp.toString()); return rsp; }
参考博客:
-- SpringMvc中使用Interceptor与Filter的注意点
https://www.cnblogs.com/FlyHeLanMan/p/6640941.html