springmvc之拦截器(对比过滤器)

来源:互联网 发布:自学编程从入门到精通 编辑:程序博客网 时间:2024/06/14 02:25

拦截器的基本工作原理:对请求的东西做过滤;

过滤器跟拦截器很相似;

比如(过滤器案例):


[ 以上登录名是中文,则在控制中心接收过来的登录名参数值是乱码,解决办法就是拦截器]

springmvc提供的org.springframework.web.filter.CharacterEncoding.class,把它配置在web.xml里;



[<init-param>对过滤器encoding做一个初始化操作“*”所有请求都在这过滤]

1:拦截器的实现(编写拦截器的类),让此类去实现HandlerInterceptor接口并重写里面的虚方法(3个)

2:注册拦截器(写了拦截器类,不配到springmvc的配置文件里,就不起作用)

他的配置文件(spring-mvc.xml这个名字不固定,可改)名字一般是在web.xml里能找到

在里面加上

<!--多个拦截器-->

<mvc:interceptors>
    <bean>拦截器实现类的全类名(带包的)</bean>
  </mvc:interceptors>

注意一定得倒命名空间:xmlns:mvc="http://www.springframework.org/schema/mvc"

还有相关的mvc的包后面的xsd一定得注意;

【那这个所有的请求都会经过这个拦截器(也就是正确情况下,所有值都可传进来),但是我们要设规则,对部分请求做拦截】

3:配置拦截器的拦截规则

用<mvc:interceptor>

    <mvc:mapping path=" /view"/>

   <bean>拦截器实现类的全类名(带包的)</bean>

</mvc:interceptor>

   <!--给访问的所有/view路径下的方法全部拦截具体拦截做什么在拦截类里边-->


拦截器里的三个重写方法:

 postHandle(HttpservletRequest  arg0,HttpServletResponse arg1,Object arg2,ModelAndView arg3);

这个方法一般对cotroller里返回的视图结果做修改

[以上.addObject()是对返回内容做了修改;.setViewName()是对返回的视图页面做修改,把原本返回到1页面的东西返回给了2页面]

afterCompletion 只是一般对请求后的资源,流,等做销毁等作用方法;


preHandle方法


请求被终止就访问不到;



举例,一个车去北京经过两个收费站,回来时先经过2在经过1;回来时发票应该先是2寄回来再是1;




拦截器的实现还有下面这种方法:

implements WebRequestInterceptor

但是preHandle不是boole类型,阻止不了请求,所以一般不用,其他配置,使用原理同上





1:场景代码,先在配置文件中(解决乱码这里是拦截器跟之前过滤器一个功能)


拦截器类里代码


2:解决权限(比如只有登录成功的人才能访问其他的事)


[假如所有登录信息存在session会话里,判断回话里有这个登录人没,没有则请求转发到登录页面,并把请求跟响应的参数传过去,且终止请求]


[拦截器就可以过滤资源等]

过滤器是java技术依赖于tomcat的;拦截器框架自带的框架接口