spring拦截器有哪些?一般如何实现?

2020-05-01 13:41:36 java常见问答 4097

spring作为java软件开发行业中公认的主流框架,其实早就已经备受瞩目了,那么你了解spring拦截器吗?了解spring拦截器都有哪些吗?一般如何去实现呢?

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>

以上就是本篇文章的所有内容了,还想了解更多相关java架构师信息,那么记得来关注本站消息哦。