SpringBoot 实现过滤器拦截请求
用户在前端登录,后端将用户信息存储在session中,通过拦截每个接口请求,判断用户是否登录,若session中存在用户信息,则放行请求,若session中不存在用户信息,则拦截请求。
·
需求:用户在前端登录,后端将用户信息存储在session中,通过拦截每个接口请求,判断用户是否登录,若session中存在用户信息,则放行请求,若session中不存在用户信息,则拦截请求。
Filter过滤器简介
过滤器: Filter, 是 Servlet 技术中最实用的技术。
过滤器是处于客户端和服务器之间的一个过滤网,可以过滤掉一些不符合要求的请求。
常见场景:
Session 校验
判断用户权限
不符合设定条件,则会被重定向特殊的地址或者设定的响应
过滤敏感词汇
设置编码
核心过滤器代码
import javax.servlet.*;
import java.io.IOException;
import javax.servlet.http.HttpSession;
import javax.servlet.annotation.WebFilter;
import cn.hutool.core.util.ObjectUtil;
import org.apache.catalina.connector.RequestFacade;
import org.springframework.stereotype.Component;
@Component
@WebFilter(filterName = "authFilter", urlPatterns = "/*")
public class AuthFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
Filter.super.init(filterConfig);
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
String requestUri = ((RequestFacade) request).getRequestURI();
if (requestUri.equals("/")) {
requestUri = "/rootDir";
}
boolean allowedPath = requestUri.contains("assets")
|| requestUri.contains("txt")
|| requestUri.contains("js")
|| requestUri.contains("png")
|| requestUri.contains("ico")
|| requestUri.contains("html")
|| requestUri.contains("css")
|| requestUri.contains("/rootDir")
|| requestUri.contains("/user/login");
if (allowedPath) {
chain.doFilter(request, response);
} else {
HttpSession session = ((RequestFacade) request).getSession();
if (ObjectUtil.isEmpty(session.getAttribute("loginUser"))) {
request.getRequestDispatcher("/error/loginExpired").forward(request, response);
} else {
chain.doFilter(request, response);
}
}
}
@Override
public void destroy() {
Filter.super.destroy();
}
}
更多推荐
已为社区贡献5条内容
所有评论(0)