普通笔记

87 阅读1分钟

一、 使用springboot时配置过滤器,拦截未登录的请求的处理方法:

方法一:

使用传统过滤器来判断用户是否登录

@Component
@WebFilter(urlPatterns = {"/index.html","/account/redirect/index","/order.html","/account/redirect/order"},filterName = "userFilter")
public class UserFilter implements Filter {

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {

    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        HttpServletRequest request = (HttpServletRequest) servletRequest;
        HttpServletResponse response = (HttpServletResponse) servletResponse;
        HttpSession session = request.getSession();
        User user = (User) session.getAttribute("user");
        if(user == null){
            response.sendRedirect("login.html");
        }else{
            filterChain.doFilter(servletRequest,servletResponse);
        }
    }

    @Override
    public void destroy() {

    }
}

其中,注意这里用到了@WebFilter注解。 同时为了生效,要加入@Component注解添加到容器中; 最后,在主启动类上添加:@ServletComponentScan,这样就可以使用原始的拦截器了。

方法二

使用springboot的拦截器,直接加到容器中:

public class UserInterceptor extends HandlerInterceptorAdapter {
    @Override
 public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        if (request.getSession().getAttribute("user") == null || request.getSession().getAttribute("admin") == null){
            response.sendRedirect("/user/login");
 return false; }
        return true;
 }
}

只要重写preHandler方法,就是相当于添加了一个拦截器; 然后,我们要使用这个拦截器(使其生效),要添加一个config来配置: 例如:

@Configuration
public class WebConfig implements WebMvcConfigurer {
    @Override
 public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new UserInterceptor())
                .addPathPatterns("/index");
 }
}

这样也可以自己添加拦截的请求路径,更加的方便!