我正在研究struts2。我使用下面的代码来检查用户是否已登录
public String execute()
{
HttpServletRequest request = ServletActionContext.getRequest();
HttpSession session = request.getSession(false);
System.out.println(session);
if(session == null)
{
return "UserLoggedIn";
}
return "success";
}
当我第一次访问打印控制台中的会话值时,它会打印null。但是,当我通过刷新页面做同样的事情时,它会打印一些像下面这样的内容,最终让用户无需登录即可访问该页面。
org.apache.catalina.session.StandardSessionFacade@16f21478
如何进行会话检查以查看用户是否登录。
非常感谢。
答案 0 :(得分:4)
如果您只是为了学习目的而这样做,我相信一旦用户登录,最好将变量存储在session
中。
假设,当使用单击登录按钮时,如果用户提供的凭据正确,您可以将变量(已登录)存储到会话中,单击注销按钮可以清除此变量。
然而,您需要注意的事情还有很多。
最好使用Struts2提供的SessionAware
接口,这是一种在您的动作类中将Session作为Map注入的简洁方法。
public class YouAction implements SessionAware{
private Map<String, Object> sessionMap;
@Override
public void setSession(Map<String, Object> sessionMap) {
this.sessionMap = sessionMap;
}
}
以上方式让您独立于HTTP对象的直接依赖关系,这可能有助于单元测试。
如果您有选项可以使用Spring安全性,这是处理用户身份验证和授权过程的更好方法。
答案 1 :(得分:1)
当用户登录时,将变量放入会话中。当注销从会话中清除该变量时。
然后在会话中检查该变量。