一、 使用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");
}
}
这样也可以自己添加拦截的请求路径,更加的方便!