spring boot 自定义登录拦截器

        最近在努力学习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为要放行的。

猜你喜欢

转载自blog.csdn.net/a15123837995/article/details/83620420