0

我正在研究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

如何进行会话检查以查看用户是否登录。

非常感谢。

4

2 回答 2

4

好吧,如果您只是为了学习目的而这样做,我相信session一旦用户登录,最好将变量存储在 中。

说,当使用单击登录按钮时,如果用户提供的凭据正确,您可以将变量(登录)存储到会话中,然后单击注销按钮可以清除此变量。

但是,您还需要注意一些事项。

最好使用SessionAwareStruts2 提供的接口,这是一种在动作类中将 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 安全性,这是处理用户身份验证和授权过程的更好方法。

于 2013-06-06T06:58:24.977 回答
1

当用户登录时,将变量放入会话中。注销时从会话中清除该变量。

然后在 session 中检查该变量。

于 2013-06-06T06:19:07.663 回答