解决方法:加.do;拦截.do文件
spring特点:AOP→面向切面
拦截器(基于AOP的一种机制:中途拦截):interceptor
类: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;
标签:控制器,拦截器,token,拦截,preHandler,客户端 From: https://www.cnblogs.com/bulei-210627/p/17095089.html