springboot使用Interceptor实现登录拦截

Posted 一步一高

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了springboot使用Interceptor实现登录拦截相关的知识,希望对你有一定的参考价值。

现在有很多项目中还在使用interceptor拦截器,所以一开始在做登录的时候我就使用了它,并做一次记录

1.(拦截器设置)创建一个AuthorityInterceptor类实现HandlerInterceptor接口

@Slf4j
@Component
public class AuthorityInterceptor implements HandlerInterceptor{

    private static final Set<String> NOT_INTERCEPT_URI = new HashSet<>();//不拦截的URI
    static {
        NOT_INTERCEPT_URI.add("/login");
        NOT_INTERCEPT_URI.add("/userLogin");
    }

    /**
     * 在请求处理之前进行调用(Controller方法调用之前)
     */
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object object) throws IOException {
        String uri = request.getRequestURI();
        log.info("uri :" + uri);
        if (NOT_INTERCEPT_URI.contains(uri)) {
            log.info("不拦截" + uri);
            return true;
        }
        log.info("拦截" + uri);
        User userInfo = (User) request.getSession().getAttribute("user");
        if (userInfo == null) {
            //throw new RuntimeException("用户未登陆");
            response.sendRedirect("/login");
        }
        return true;
    }

    /**
     * 请求处理之后进行调用,但是在视图被渲染之前(Controller方法调用之后)
     */
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object object, ModelAndView mv){
    }

    /**
     * 在整个请求结束之后被调用,也就是在DispatcherServlet 渲染了对应的视图之后执行
     * (主要是用于进行资源清理工作)
     */
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object object, Exception ex){
    }
}

2.拦截器设置拦截静态资源

@Configuration
public class WebMvcConfig extends WebMvcConfigurationSupport {

public void addInterceptors(InterceptorRegistry registry) {
// 添加拦截器,配置拦截地址
registry.addInterceptor(new AuthorityInterceptor())
.addPathPatterns("/**")
.excludePathPatterns("/login","/userLogin")
.excludePathPatterns("/image/**");
}

/**
* 继承WebMvcConfigurationSupport类会导致自动配置失效
* 所以这里要指定默认的静态资源的位置
* @param registry
*/
protected void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/**")
.addResourceLocations("classpath:/resources/") //classpath要带上,因为boot项目默认的
                .addResourceLocations("classpath:/static/");
super.addResourceHandlers(registry);
}

}

以上是关于springboot使用Interceptor实现登录拦截的主要内容,如果未能解决你的问题,请参考以下文章

springboot filter and interceptor

springboot+redis+Interceptor+自定义annotation实现接口自动幂等

SpringBoot支持interceptor(拦截器)

SpringBoot - JSP,Servlet,拦截器(Interceptor),过滤器(Filter),Runner 接口

SpringBoot 拦截器(Interceptor)的使用

SpringBoot实现登陆拦截