大家好,又见面了,我是你们的朋友全栈君。
spring拦截器实现HandlerInterceptor接口或者继承HandlerInterceptorAdapter类都可以实现,主要有三个方法,preHandle在调用具体的controller之前执行,postHandle在调用controller之后,但是页面渲染之前执行,afterCompletion在页面渲染之后执行,拦截器的功能类似与filter的功能,个人认为spring为什么搞一个拦截器,主要是因为拦截器属于spring管理的范畴类,方便资源的分配,也便于与其他的整合,不会像filter这样突兀,和filter类型,同事命中多个拦截器时,按顺序一个一个往后执行。拦截器中可以做一些权限校验,数据校验转换等事情。
编写拦截器
public class UserContextInterceptor extends HandlerInterceptorAdapter {
//拦截器可以使用spring的依赖注入
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
//可以在这里处理用户认证
if (true) {
response.setContentType("application/json");
response.setCharacterEncoding("UTF-8");
try (PrintWriter writer = response.getWriter()) {
writer.write("{'message':'认证不通过'}");
} catch (IOException e) {
e.printStackTrace();
}
}
return super.preHandle(request, response, handler);
}
}
配置拦截器
<mvc:interceptors>
<!-- 权限校验拦截器 -->
<mvc:interceptor>
<!--匹配的路径-->
<mvc:mapping path="/**/*.do"/>
<!--不包含的路径-->
<mvc:exclude-mapping path="/riskControl/**/*.do"/>
<bean class="com.zhan.design.interceptor.UserContextInterceptor"/>
</mvc:interceptor>
</mvc:interceptors>
如何配置,比如访问/hello/word.do,就会返回认证不通过
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/149327.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...