gpt4 book ai didi

java - 即使 session 被破坏也获取旧 session 值

转载 作者:太空宇宙 更新时间:2023-11-04 12:18:15 25 4
gpt4 key购买 nike

 @Override
public void sessionDestroyed(HttpSessionEvent arg0)
{
boolean isRemoved = sessionIdSet.remove(arg0.getSession().getId());
if (isRemoved)
{
arg0.getSession().invalidate();
System.out.println(arg0.getSession().getAttribute("userName"));
System.out.println("session destroyed");
}
}

假设登录时属性userNametestUser。因此,在我的 java 控制台超时后,我得到 null and session destroy 打印。因此,如果它为 null,则意味着当我在 jsp 中执行以下操作时,我应该得到 null,但我仍然得到 testUser

 $("body").click(function(event){
var property="<%=session.getAttribute("userName")%>";
//Here I expect property to be null as session is destroyed
//and it prints null in java so it should also here.
alert(property);
//But what i get here is testUser
}

使用Spring拦截器

public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws ServletException {

boolean allowRequest = true;
String requestUri = request.getRequestURI().toString();
HttpSession session = request.getSession(false);
logger.info("Pre-intercepting request URI: " + requestUri);
try {
if(null != session) {
String sessionBelongsTo = (String) session.getAttribute("CUR_TYPE");
String user = (String) session.getAttribute("userName");
System.out.println(user);

if(!requestUri.endsWith("/login") && !requestUri.endsWith("/loginauth") && !requestUri.endsWith("sap-ui-core.js") && !requestUri.endsWith("/main")) {
if(null == user) {
logger.info(""
+ "Login required, redirecting to LOGIN page");
response.sendRedirect(request.getContextPath() + "/login");
allowRequest = false;
}
else {
logger.info("Login not required");
}
}
}
else{
logger.debug("session is null.redirecting to login");
session = request.getSession();
response.sendRedirect(request.getContextPath() + "/login");
allowRequest = false;
}
}catch(IOException ioe) {
logger.info(ioe.getMessage());
allowRequest = false;
}
return allowRequest;
}

使用拦截器进行重定向调用 GET http://localhost:9090/app/login 成功,但重定向从未真正发生。

最佳答案

您正在混合两种不同的代码。您必须意识到,在哪里何时执行每个代码 - 当页面被请求和呈现时(即响应发送到浏览器之前),服务器上的 JSP 和浏览器中的 Javascript,之后浏览器收到已经生成的响应。

<%=session.getAttribute("userName")%>在服务器上处理,并且您的浏览器接收例如var property="johndoe"; - 当您的 onclick 时,JSP 代码不会再次执行。处理程序被执行。

关于java - 即使 session 被破坏也获取旧 session 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39137933/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com