首页 > 编程笔记 > Java笔记 阅读:18

Spring Boot拦截器详解(附带实例)

拦截器在 Web 系统中非常常见,一般用于拦截用户请求,实现访问权限控制、日志记录、敏感过滤等功能。

拦截器在实际的应用开发中非常常见,对于某些全局统一的操作,我们可以把它提取到拦截器中实现。总结起来,拦截器大致有以下几种使用场景:
Spring Boot 定义了 HandlerInterceptor 接口来实现自定义拦截器的功能。

HandlerInterceptor 接口定义了 preHandle、postHandle、afterCompletion 三种方法,通过重写这三种方法实现请求前、请求后等操作:
有时我们只需要实现 3 种回调方法之一,如果实现 HandlerInterceptor 接口,则无论是否需要 3 种方法都必须实现,此时 Spring 提供了一个 HandlerInterceptorAdapter 适配器(一种适配器设计模式的实现),允许我们只实现需要的回调方法。

HandlerInterceptor实现拦截器

我们在访问某些需要授权的页面,如订单详情、订单列表等需要用户登录后才能查看的功能时,需要对这些请求拦截,进行登录检测,符合规则的才允许请求通过。接下来通过登录状态检测的例子演示拦截器的使用。

首先,创建自定义登录拦截器,示例代码如下:
public class LoginInterceptor implements HandlerInterceptor {
    /*注册拦截器*/
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
            throws Exception {
        Object user = request.getSession().getAttribute("user");
        if (user == null){
            request.setAttribute("msg","您没有权限这么做!");
            request.getRequestDispatcher("/").forward(request,response);
            return false;
        }
        return true;
    }
}
在上面的示例中,LoginInterceptor 继承 HandlerInterceptor 接口,实现 preHandle 接口,验证用户的 Session 状态。如果当前用户有登录信息,则可以继续访问;如果当前用户没有登录信息,则返回无权限。

然后,将拦截器注入系统配置。定义 MyMvcConfig 配置类,将上面定义的 LoginInterceptor 拦截器注入系统中,示例代码如下:
@Configuration
public class MyMvcConfig implements WebMvcConfigurer {
   @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new LoginInterceptor())
        .addPathPatterns("/**").excludePathPatterns("/",
        "/user/login","/asserts/**","/webjars/**");
    }
}

相关文章