JSP未手动创建Session却已存在,Filter判断异常求助
问题原因及解决方案
核心原因:JSP默认自动创建Session
你访问home.jsp时,尽管没手动写代码创建Session,但JSP的page指令默认开启了session="true",容器在渲染该JSP时会自动创建Session并将对应的JSESSIONID Cookie返回给浏览器。当你提交表单到/login路径时,浏览器会携带这个Cookie,因此Filter里调用req.getSession(false)能拿到之前自动创建的Session。
解决步骤
修改home.jsp,禁用自动创建Session
在home.jsp的page指令中添加session="false",让容器不再自动生成Session:<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" session="false"%>修正LoginFilter的语法错误
你提供的LoginFilter.java存在类名错误、重复import等语法问题,修正后的完整代码如下:package com.linuxx; import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.annotation.WebFilter; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; @WebFilter("/login") public class LoginFilter implements Filter { @Override public void init(FilterConfig filterConfig) throws ServletException { // 初始化逻辑(按需添加) } @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { HttpServletRequest req = (HttpServletRequest) request; HttpSession session = req.getSession(false); System.out.println(session == null); // 此时应输出true // 必须调用此方法,否则请求会被拦截终止,无法到达后续处理逻辑 chain.doFilter(request, response); } @Override public void destroy() { // 销毁逻辑(按需添加) } }清理浏览器Cookie
重启服务器后,清理浏览器中的JSESSIONID Cookie,避免旧的Session标识干扰测试结果。
内容的提问来源于stack exchange,提问作者Chad_Manoj
相关产品推荐
相关产品推荐

