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;

 

posted @ 2023-02-06 13:02  醭酹  阅读(143)  评论(0)    收藏  举报