书城2-Filter拦截未登录用户
Filter 拦截未登录用户
未登录用户可以访问登录页面、商城首页等,但不能使用添加购物车、结账等功能
因此,要判断是否登录,若未登录,点击结账则跳转到登录页面
- Filter 拦截所有页面,再设置未登录用户可以访问的白名单
@WebFilter(
urlPatterns = {"*.do","*.html"},
initParams = {
@WebInitParam(name = "bai",
value = "/page.do?operate=page&page=user/login,/user.do?null")
}
)
public class SessionFilter implements Filter {
List<String> baiList = null;
@Override
public void init(FilterConfig filterConfig) throws ServletException {
// 在 init 中配置白名单 baiList
String bai = filterConfig.getInitParameter("bai");
String[] baiArr = bai.split(",");
baiList = Arrays.asList(baiArr);
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) servletRequest;
HttpServletResponse response = (HttpServletResponse) servletResponse;
//判断传入 request 的连接是否在白名单中,如果是,则直接放行,不是则重定向
String uri = request.getRequestURI();
String queryString = request.getQueryString();
String str = uri + "?" + queryString;
if (baiList.contains(str)){
filterChain.doFilter(request,response);
return;
}else {
HttpSession session = request.getSession();
Object currUserObj = session.getAttribute("currUser");
if(currUserObj == null) {
response.sendRedirect("page.do?operate=page&page=user/login");
}else {
filterChain.doFilter(request,response);
}
}
}
@Override
public void destroy() {
Filter.super.destroy();
}
}
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析