spring拦截器

    xiaoxiao2023-11-17  133

    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,就会返回认证不通过

    最新回复(0)