根据Struts 2中的用户设置cookie

时间:2015-02-01 19:05:27

标签: java cookies struts2

我想根据登录用户设置cookie。因此,当用户x登录时,他可以看到他输入的姓名,如果用户y登录,他会看到他之前输入的姓名。我该怎么办?因为现在,登录的最新用户是cookie的值。

我验证我的用户是这样的:

public class LoginService {
    public boolean verifyLogin(User user){
        if(user.getUserId().equals("userId") && user.getPassword().equals("password")){
            return true;
        }

        if(user.getUserId().equals("random") && user.getPassword().equals("a")){
            return true;
        }
        return false;
    }
}

这就是我在LoginAction中设置Cookie的方式:

public Set<Cookie> getCookies(){
      Set<Cookie> cookies = new HashSet<>();

      Cookie userId = new Cookie("userId", user.getUserId() );
      userId.setMaxAge(60*60*24*365); // Make the cookie last a year!
      userId.setPath("/"); //Make it at root.
      cookies.add(userId);}

这就是我在FormAction中设置Cookie的方式:

 public Set<Cookie> getCookies(){
      Set<Cookie> cookies = new HashSet<>();

      Cookie name = new Cookie("name", userInfo.getName() );
      name.setMaxAge(60*60*24*365); // Make the cookie last a year!
      name.setPath("/"); //Make it at root.
      cookies.add(name); }

1 个答案:

答案 0 :(得分:1)

您应该为已经过验证的用户保存Cookie。如果首先验证用户,则将其保存到会话中。然后使用会话用户提供cookie。像这样,

if (verifyLogin(User user))
  session.put("user", user);

首先要保存cookie,请从会话中获取用户

public Set<Cookie> getCookies(){
      Set<Cookie> cookies = new HashSet<>();
      User user = (User) session.get("user");
      if (user != null){
          Cookie userId = new Cookie("userId", user.getUserId() );
          userId.setMaxAge(60*60*24*365); // Make the cookie last a year!
          userId.setPath("/"); //Make it at root.
          cookies.add(userId);
      }
      return cookies;
}

要访问会话映射,您可以使用SessionAware界面。另一种方法是从动作上下文中获取会话。

请注意,浏览器会共享Cookie。如果您在使用不同用户同时使用相同的浏览器时,它将使用相同的cookie,除非您提供每个会话cookie实现。