欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

spring boot 自定义登录拦截器

程序员文章站 2022-04-30 15:50:59
...

        最近在努力学习spring boot中,这里记录一下拦截器的相关知识,在spring boot中,写一个自定义的拦截器类,用于拦截不通过登录之后而进行的非法访问,拦截的操作,也是日常项目中,都要用到的,不多说了,看正文。

        要实现一个自定义登录的拦截器,这个类要实现HandlerInterceptor接口,HandlerInterceptor接口源码如下:

public interface HandlerInterceptor {
    default boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        return true;
    }

    default void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable ModelAndView modelAndView) throws Exception {
    }

    default void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable Exception ex) throws Exception {
    }
}

        在JDK1.8中,该接口的方法前面有一个default进行修饰,表明实现该接口的类,可以只实现自己想要实现的方法,其他的方法,继承父类,从源码中也可以看到,用default修饰的方法,有方法体,关于default的更多知识,本篇不做过多说明。

        自己的类实现这个接口,重写接口的preHandle方法即可,在方法体中,写自己的业务逻辑,我这里是做登录的拦截器,方法体的代码如下所示:

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        Object name = request.getSession().getAttribute("name");
        if(name == null){
            request.setAttribute("msg","请先登录");
            request.getRequestDispatcher("/index.html").forward(request,response);
            return false;
        }
        return true;
    }

        在写完自定义的拦截器后,接着,就是要将其放入spring boot容器中,以及对哪些请求进行放行。在自定义的MvcConfig类中,重写addInterceptors方法,我的具体代码如下所示:

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new LoginHandlerInterceptor()).addPathPatterns("/**")
                .excludePathPatterns("/","/index.html","/login","/login.html",
                        "/user/login","/static/**","/webjars/**");
        //excludePathPatterns方法的参数 为要放行的请求
    }

       addPathPatterns为要拦截的,excludePathPatterns为要放行的。