m0_71530167 2023-06-10 17:02 采纳率: 0%
浏览 11

Javaweb未登录被filter过滤,过滤后重定向到登录页面,然后登录后就不放行被过滤的页面了该怎么办

Javaweb
未登录被filter过滤,过滤后重定向到登录页面,然后登录后就不放行被过滤的页面了该怎么办


```java
package filter;


import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import java.io.IOException;

public class LoginCheckFilter implements Filter {
    private String excludedPages;
    private String[] excludedPageArray;
    @Override
    public void init(FilterConfig config) throws ServletException {
        excludedPages = config.getInitParameter("excludedPages");
        if (null != excludedPages && excludedPages.length() > 0) {
            excludedPageArray = excludedPages.split(",");
        }
        return;
    }
    @Override
    public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
        boolean isExcludedPage = false;
        HttpSession session = ((HttpServletRequest) req).getSession();
        Object user = session.getAttribute("user");
        System.out.println("user"+user);
        // 获取不过滤的列表
        for (String page : excludedPageArray) {
            if (((HttpServletRequest) req).getServletPath().equals(page)) {
                isExcludedPage = true;
                break;
            }
        }
        if (isExcludedPage) { //如果有不过滤的页面,放行
            chain.doFilter(req, resp);
        } else {
            if (user != null){
                chain.doFilter(req,resp);
            }else {
                ((HttpServletRequest)req).getRequestDispatcher("/first.jsp").forward(req,resp);
            }
        }

    }
    @Override
    public void destroy() {
    }
}



```

  • 写回答

2条回答 默认 最新

  • WaitIKnowYou 2023-06-11 12:46
    关注

    在Filter中,可以通过检查会话中是否存在登录状态信息来判断用户是否已登录,如果已登录,则放行请求,否则进行重定向到登录页面

    public class AuthenticationFilter implements Filter {
    
        @Override
        public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
            HttpServletRequest httpRequest = (HttpServletRequest) request;
            HttpServletResponse httpResponse = (HttpServletResponse) response;
    
            // 获取当前会话
            HttpSession session = httpRequest.getSession(false);
    
            // 检查会话中是否存在登录状态信息
            if (session != null && session.getAttribute("loggedIn") != null) {
                // 用户已登录,放行请求
                chain.doFilter(request, response);
            } else {
                // 用户未登录,重定向到登录页面
                httpResponse.sendRedirect(httpRequest.getContextPath() + "/login");
            }
        }
    
        // 省略其他方法
    }
    
    
    
    评论

报告相同问题?

问题事件

  • 创建了问题 6月10日

悬赏问题

  • ¥15 12864只亮屏 不显示汉字
  • ¥20 三极管1000倍放大电路
  • ¥15 vscode报错如何解决
  • ¥15 前端vue CryptoJS Aes CBC加密后端java解密
  • ¥15 python随机森林对两个excel表格读取,shap报错
  • ¥15 基于STM32心率血氧监测(OLED显示)相关代码运行成功后烧录成功OLED显示屏不显示的原因是什么
  • ¥100 X轴为分离变量(因子变量),如何控制X轴每个分类变量的长度。
  • ¥30 求给定范围的全体素数p的(p-2)/p的连乘积值
  • ¥15 VFP如何使用阿里TTS实现文字转语音?
  • ¥100 需要跳转番茄畅听app的adb命令