SpringBoot:拦截器-登录检查和静态资源放行

下面通过简单的拦截器例子实现登录检查:

/**
 * @author Hugo
 * @discription 登录检查
 * 1、配置好拦截器要拦截哪些请求
 * 2、把这些配置放入容器中
 */
public class LoginInterceptor implements HandlerInterceptor {
    /**
     * 目标方法执行之前
     * @param request
     * @param response
     * @param handler
     * @return
     * @throws Exception
     */
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        //登录检查逻辑
        HttpSession session = request.getSession();
        Object objectSeesion = session.getAttribute("loginUser");
        if(objectSeesion !=null)
        {
            //放行
            return true;
        }
        //拒绝访问资源,因未登录,跳转登录页面
        //response.sendRedirect("/login");//重定向登录页面,但是无法携带参数

        request.setAttribute("message","请先登录再访问");
        request.getRequestDispatcher("/login").forward(request,response);//转发请求,可携带请求域中内容
        return false;
    }

    /**
     * 目标方法执行完成以后
     * @param request
     * @param response
     * @param handler
     * @param modelAndView
     * @throws Exception
     */
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        HandlerInterceptor.super.postHandle(request, response, handler, modelAndView);
    }

    /**
     * 页面渲染之后
     * @param request
     * @param response
     * @param handler
     * @param ex
     * @throws Exception
     */
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        HandlerInterceptor.super.afterCompletion(request, response, handler, ex);
    }
}

下面简单实现静态资源按定值规则放行功能:

/**
 * @author Hugo=
 * @discription
 * 1、编写一个拦截器实现handlerinterceptor接口
 * 2、将拦截器注册到容器组(实现WebMvcConfigurer的addInterceptors)
 * 3、编写拦截规则(如果拦截所有请求资源,静态资源也会被拦截)
 */
@Configuration
public class AdminWebConfig implements WebMvcConfigurer {
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new LoginInterceptor())
                .addPathPatterns("/**")//所有请求都被拦截,包括静态资源
                .excludePathPatterns("/login");//放行的资源或请求
    }
}

版权声明:本文为wangjiansui原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。