springMVC拦截器 interceptor!
2017-06-20 20:46
525 查看
过滤器filter和拦截器interceptor功能非常相似,都可以用来解决一些共性问题(乱码问题、权限问题)
filter依赖于servlet容器,基于函数回调,过滤范围较大
interceptor依赖于框架容器,基于反射机制,只拦截请求 拦截器处理共性问题,减少代码的重复,便于维护
过滤器实例:在web.xml中配置
拦截器:
实现拦截器步骤:
1.创建interceptor的包,创建IntecerptorDemo类,实现HandlerInterceptoe接口,重写方法。
2.把拦截器注册到到springMvc中。
3.配置拦截器拦截的规则,不配置将拦截所有请求。
多个拦截器方法执行顺序:
多个拦截器都需要第二步注册到springmvc
preHandler1-->preHandler2-->controller-->postHandler2-->postHandler1-->afterCompletion2-->afterCompletion1
另一种实现拦截器的方法:
实现webRequestIntercrptor 注册到springmvc写法不变 弊端: preHandler方法无返回值为void 不能终止请求 不常用
拦截器的使用场景:
原则:处理所有请求的共同问题
1.解决乱码问题
2.解决权限验证问题
联通盒子拦截器实例:
getContextPath: /test 得到当前应用的根目录
getRequestURI: /test/test.jsp
getRequestURL: http://localhost:8080/test/test.jsp
菜鸟求纠错补充。。。。
filter依赖于servlet容器,基于函数回调,过滤范围较大
interceptor依赖于框架容器,基于反射机制,只拦截请求 拦截器处理共性问题,减少代码的重复,便于维护
过滤器实例:在web.xml中配置
<filter> <filter-name>demo</filter-name> <filter-class>****</filter-class> //filter启动时的初始参数 <init-param> <param-name>demo</param-name> <param-value>utf8</param-value> </init-param> <filter> <filter-mapping> <filter-name>demo</filter-name> //匹配所有的请求 <url-pattern>*</url-pattern> </filter-mapping>
拦截器:
实现拦截器步骤:
1.创建interceptor的包,创建IntecerptorDemo类,实现HandlerInterceptoe接口,重写方法。
//返回值:表示是否需要把当前请求拦截下来 //返回false请求被终止,返回true请求会继续运行 //参数Object代表被拦截的请求目标对象 1.public boolean preHandle(HttpServletRequest request,HttpServletResponse response, Object handler){ //请求之前被执行 return true; } 2.public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1,Object arg2, ModelAndView arg3) throws Exception { //渲染视图前被执行 //可以通过ModelAndView 参数来改变显示的视图,或者发往视图的方法 arg3.addObject("msg","拦截器想要返回的数据"); //会改变controller中ModelAndView 返回的数据 arg3.setViewName("/hello2.jsp"); //会改变controller中ModelAndView要显示的页面 } 3.public void afterCompletion(HttpServletRequest arg0,HttpServletResponse arg1, Object arg2, Exception arg3)throws Exception { //请求结束后被执行 }
2.把拦截器注册到到springMvc中。
<mvc-interceptors> <mvc-interceptor> <mvc-mapping path="/*"/> <!-- 如果不配置或/*,将拦截所有的Controller --> <mvc-mapping path="/**"/> <!-- /**是指所有文件夹及其子文件夹,/*指所有文件夹不含子文件夹 --> <bean class=" 创建拦截器类的位置 "></bean> </mvc-interceptor> <!-- 联通盒子项目实例 <mvc:mapping path="/**" /><mvc:mapping path="/**/*" /><mvc:mapping path="/**/*/*" /> --> </mvc-interceptors>
3.配置拦截器拦截的规则,不配置将拦截所有请求。
多个拦截器方法执行顺序:
多个拦截器都需要第二步注册到springmvc
preHandler1-->preHandler2-->controller-->postHandler2-->postHandler1-->afterCompletion2-->afterCompletion1
另一种实现拦截器的方法:
实现webRequestIntercrptor 注册到springmvc写法不变 弊端: preHandler方法无返回值为void 不能终止请求 不常用
拦截器的使用场景:
原则:处理所有请求的共同问题
1.解决乱码问题
public boolean preHandle(HttpServletRequest request,HttpServletResponse response, Object handler){ //请求之前被执行 request.setCharacterEncding("utf-8"); return true; }
2.解决权限验证问题
public boolean preHandle(HttpServletRequest request,HttpServletResponse response, Object handler){ //请求之前被执行 //用户是否登录判断 if(request.getSession().getAttribute("sessionName") == null){ //用户无会话,未登录,终止请求,发送到登录页面 request.getRequestDispatcher("login.jsp(或者是请求/login)").forward(request,response); return false; } return true; }
联通盒子拦截器实例:
getContextPath: /test 得到当前应用的根目录
getRequestURI: /test/test.jsp
getRequestURL: http://localhost:8080/test/test.jsp
//不被拦截的请求 String[] noFilters = new String[]{ "login", // 登录 "index", "regist" } String uri = request.getRequestURI(); boolean beFilter = true; for(String str : noFilters){ if(uri.indexOf(str) != -1){ return false } } if(beFilter){ Object userObject = request.getSession().getAttribute("sessionName"); if(userObject == null ){ request.getRequestDispatcher("/login").forward(request,response); retuen false; } } return true;
菜鸟求纠错补充。。。。
相关文章推荐
- SpringMVC 中的Interceptor 拦截器
- springmvc拦截器Interceptor实例
- SpringMVC的拦截器(Interceptor)和过滤器(Filter)的区别与联系
- springmvc——拦截器Interceptor
- SpringMVC的拦截器(Interceptor)和过滤器(Filter)详解
- SpringMVC的拦截器(Interceptor)和过滤器(Filter)的区别与联系
- Java过滤器(Filter)与SpringMVC拦截器(Interceptor)之间的关系与区别
- springmvc拦截器HandlerInterceptorAdapter预处理
- 关于springMVC中的使用拦截器interceptor问题
- Springmvc第三讲学习笔记,拦截器Interceptor的使用
- java 过滤器(Filter)与springMVC 拦截器(interceptor)的实现案例
- SpringMVC的拦截器(Interceptor)和过滤器(Filter)的区别与联系
- SpringMVC拦截器Interceptor
- SpringMVC的拦截器(Interceptor)和过滤器(Filter)的区别与联系
- SpringMVC之Interceptor拦截器之登录拦截器
- SpringMVC 中的Interceptor 拦截器
- SpringMVC 拦截器Interceptor
- springMVC中多个拦截器Interceptor的执行顺序
- SpringMVC的拦截器(Interceptor)和过滤器(Filter)的区别与联系
- Spring MVC 中 HandlerInterceptorAdapter的使用[SpringMVC中请求拦截器的实现]