springMVC之mvc:interceptors拦截器的应用转载

原创
小哥 3年前 (2022-12-26) 阅读数 9 #大杂烩

1.配置拦截器

在springMVC.xml配置文件增加:

1 2 3 4 5 6 7 </mvc:interceptor> 8 </mvc:interceptors>

说明:

1)mvc:mapping 拦截器路径配置

2)mvc:exclude-mapping 拦截器不需要拦截路径

2、样例:

1 public class LogsInterceptor extends HandlerInterceptorAdapter { 2 3 private static final Logger logger = LoggerFactory.getLogger(LogsInterceptor.class); 4
5 private NamedThreadLocal logContext = new NamedThreadLocal("log-id"); 6 7 @Autowired 8 private TLogDao logDao; 9 10 / 11 preHandle该方法用于处理器拦截,顾名思义,该方法将用于Controller在处理之前调用, 12 SpringMVC中的Interceptor拦截器是连锁的,可以同时存在。Interceptor, 13 然后SpringMVC将按照申报前后的顺序逐一执行, 14 所有这些Interceptor中的preHandle方法将在Controller在调用方法之前调用。 15 SpringMVC的这种Interceptor链结构也可以中断, 16 这种中断是为了preHandle返回值false,当preHandle返回值false整个请求都结束了。 17 */ 18 @Override 19 public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { 20 String host = request.getRemoteHost(); 21 String url = request.getRequestURI(); 22 TLogEntity entity = new TLogEntity(); 23 entity.setCreateTime(new Timestamp(System.currentTimeMillis())); 24 entity.setCreateUser("admin"); 25 entity.setIpAddress(host); 26 entity.setLogUrl(url); 27 entity.setIsSuccess("N"); 28 logDao.save(entity); 29 logContext.set(entity.getLogId()); 30 31 logger.debug("IP为---->>> " + host + " <<<-----已访问系统"); 32 return true; 33 } 34 35 /* 36 此方法仅用于当前Interceptor的preHandle方法返回一个值true何时实施。 37 postHandle它用于处理器拦截,其执行时间是处理器正在处理的时间。 后, 也就是在Controller在方法调用之后执行, 38 但它会在DispatcherServlet在渲染视图之前执行,也就是说,在这种方法中可以执行。ModelAndView运转 39 此方法的链结构与正常访问的方向相反,也就是说,首先声明它。Interceptor拦截器方法将在会议之后被调用, 40 这跟Struts2拦截器内部的执行过程有点像, 41 只是Struts2里面的intercept要手动调用的方法ActionInvocation的invoke方法, 42 Struts2中调用ActionInvocation的invoke方法是调用下一个Interceptor或致电action, 43 然后要在Interceptor上一次呼叫的内容将写入呼叫中。invoke之前,在Interceptor之后,调用的内容将写入调用中。invoke方法之后。 44 / 45 @Override 46 public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { 47 } 48 49 / 50 该方法还需要相应的电流Interceptor的preHandle方法返回值true将执行。 51 此方法将在整个请求之后完成,即。DispatcherServlet渲染视图执行, 该方法的主要目的是清理资源, 52 */ 53 @Override 54 public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) { 55 String host = request.getRemoteHost(); 56 String logId = logContext.get(); 57 TLogEntity entity = logDao.findOne(logId); 58 entity.setIsSuccess("Y"); 59 logDao.save(entity); 60 61 logger.debug("IP为---->>> " + host + " <<<-----访问成功"); 62 } 63 64 }

在这个拦截器中,您可以在方法执行之前执行它。session或权限。

版权声明

所有资源都来源于爬虫采集,如有侵权请联系我们,我们将立即删除