ssm 拦截器

1.DispatcherServlet

SpringMVC具有统一的入口DispatcherServlet,
DispatcherServlet是ssm框架前置控制器,所有的请求都通过DispatcherServlet。配置在web.xml文件中的。拦截匹配的请求,Servlet拦截匹配规则可以自己定义,定义规则可以上网查,这里不一一叙述了,把拦截下来的请求,首先进入方法doDispatch(HttpServletRequest request, HttpServletResponse response)经过一系列步奏,找到你要请求的目标Controller,最后交给他处理(没有其他的拦截器)来处理。如果没有handle处理器就会返回去,不再执行后面,所以说能拦截jsp页面,JS等静态资源,但是不能处理(缺陷解决在下面)。

那么在web.xml配置如下:

2.自定义拦截器

那么自定义拦截器又是怎么实现的了,和前置拦截器有什么关系了?

首先请求通过统一入口进入DispatcherServlet,再DispatcherServlet里面有个方法寻找这个这个请求的处理器和Interceptor,这时候就会寻找到HandlerInterceptor 接口,或者是这个类继承实现了HandlerInterceptor 接口的类,就会找到你自定义的拦截器,继承HandlerInterceptor 有是三个方法,preHandle , postHandle 和 afterCompletion,preHandle 在业务处理器处理请求之前被调用,然后处理完请求就会调用postHandle,或者在视图渲染之前调用它,最后请求执行完,视图渲染完调用,DispatcherServlet完全处理完请求后被调用afterCompletion,可用于清理资源,如果定义多个拦截器,先定义的拦截器先执行preHandle,但是没有另外的两个方法,而是等待其他拦截器执行prehandle方法,知道最后一个拦截器执行完毕,也是从最后一个拦截器逆序执行这两个方法。

举个栗子:  自定义拦截器类处理未登录问题

注意:在login页面操作要放过
在spring-mvc.xml配置自定义的拦截器:

3-filter

spring mvc的拦截器只拦截controller不拦截jsp,html 页面文件,如果想要拦截那怎么办?

可以利用用过滤器filter,filter是在servlet前执行的,所以先执行filter后执行拦截器。访问页面时都进行过滤验证,如果存在该用户session,则访问该页面,否则跳转到登陆页面登录,保存session后访问其它页面,具体实现如下:

上面是具体实现,在web.xml配置如下:

猜你喜欢

转载自blog.csdn.net/sinat_37529004/article/details/81275026