interceptor拦截器
客户端浏览器 向web服务器端发送请求,web服务器端用最原始的控制器servlet响应,响应过程中途被拦截下来用springMVC控制器处理。
interceptor适用于SpringMVC框架的工程。作用是构成拦截器栈,完成登录判断,访问权限检查等实现特定功能。interceptor将目标执行方法拦截,用interceptor进行用户登录验证,即可减轻代码冗余,也可提高重用率。
*过滤器:过滤所有请求/*
中文乱码:检查过滤器配置
需拦截的操作:
加.do;→拦截.do文件
spring特点:AOP→面向切面
拦截器(基于AOP的一种机制:中途拦截):interceptor
interceptor执行流程:
①:首先执行preHandler()方法,返回值为true,则程序会继续执行。
②:控制器处理请求后执行postHandle()方法。
③:DispatcherServlet处理完请求后执行afterCompletion()方法。
类:SignIntercer(签名的拦截器)实现公共拦截器接口→使其实现HandlerInterceptor(spring自带拦截器);将映射拦截下来 三个方法: ①:preHandler:拦截器请求控制器之前(还没到达控制器);prehander→true:通过;false:失败;(可放行可拦下来) ②:postHandle:请求到达控制器方法里面去了但还没有返回,(过滤)页面还没有渲染;(不起到真正的阻止作用)拦截下来重新处理。 ③:afterCompletion:回调
配置拦截器:springMVC-servlet当中:
<!-- 拦截器 -->
<mvc:interceptors>
<!-- 对所有请求都拦截,公共拦截器可以有多个 -->
<!-- <bean name="testInterceptor" class="cn.zifangsky.interceptor.TestInterceptor" /> -->
<mvc:interceptor>
<mvc:mapping path="/**/*.do"/> //拦截什么映射:只要后缀为.do的。客户端发出的请求带.do的
<!-- 特定请求的拦截器只能有一个 -->
<bean class="com.li.practice.interceptor.SignIntercepter" />
</mvc:interceptor>
</mvc:interceptors>
测试一下拦截器:
在preHandler中输出System.out.println("preHandler-----------");
return fasle:有拦截但是拦下来了:在拦截后,控制器中会出现sysout,并没有数据传到客户端;
return true:有拦截但是放行了:在拦截后,控制器中会出现sysout,数据传到客户端
拿到客户端的令牌:客户端发送的请求(数据)都放在了request里。通过request调用。首先保证请求时带有token;
http协议:header(URL请求目标地址→添加access_token),body;
headers:{"access_token":xxxxxx}
获取token→在SignIntercer中preHandler:String token=request.getheader("access_token");sysout(token);
验证令牌:在preHandler中:
ResultJson resultJson=userService.sign(token);
if(resultJson.getcode()==0)
return true;
浙公网安备 33010602011771号