坚持两天一更,尽快把笔记更新上来~
public class SpringMVCInterceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o) throws Exception { /*在一个应用中或者说是在一个请求中可以同时存在多个Interceptor,每个 Interceptor 的调用会依 据它的声明顺序依次执行,而且最先执行的都是每个Interceptor 中的preHandle ()方 法.当它返回为false时,表示请求结束,后续的Interceptor 和Controller 都不会再执 行;当返回值为true 时就会继续调用下一个Interceptor 的preHandle() 方法,如果 已经是最后一个Interceptor 的时候就会调用当前请求的Controller 方法。可在此函数 设置字符编码 、登陆验证 */ request.setCharacterEncoding("utf-8"); if(request.getSession.getAttibute("user")==null){ request.getRequestDispatcher( "/WEB-INF/jsp/login.jsp").forward(request,response); retrun false;//中断请求 }; //其他处理细节..... return true; } @Override public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception { /*在Controller执行后且jsp页面之前执行此方法,可在此用modelAndView改变Controller中 modelAndView的数据 */ } @Override public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception { //此方法不常用,关闭资源、流 } }
xmlns:mvc="http://www.springframework.org/schema/mvc" xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd"> <!--注册拦截器--> <mvc:interceptors> <!-- 使用bean定义一个Interceptor, 直接定义在mvc:interceptors根下面的SpringMVCInterceptor将拦截所有的请求 <mvc:mapping path="/**" /> 如果只写一个*,则不能拦截类似/*/*的请求。 /**的意思是所有文件夹及里面的子文件夹 /*是所有文件夹,不含子文件夹 /是web项目的根目录。 静态资源的请求需要判断不进行拦截 --> <bean class="com.handler.SpringMVCInterceptor"/> <mvc:interceptor> <!-- 定义在mvc:interceptor下面的表示是对特定的请求才进行拦截的 --> <mvc:mapping path="/UserOperate"/> <!--针对静态资源不进行过滤--> <mvc:exclude-mapping path="/css/**"/> <mvc:exclude-mapping path="/js/**"/> <mvc:exclude-mapping path="/image/**"/> <bean class="com.handler.SpringMVCInterceptor"/> </mvc:interceptor> </mvc:interceptors>
原文:https://www.cnblogs.com/afei1759/p/11229138.html