用户登录后的信息存取

这几天按照书上的案例对bbs的搭建多少学了点儿东西。其他的倒是没有什么,书上的编程规习惯很好,值得学习,类的划分和接口的定义对功能扩展提供了很大的方便。

在程序中,用到了验证拦截器 AuthenticationInterceptor 。具体代码如下:

 1 import java.util.Map;
 2 
 3 import org.model.User;
 4 
 5 import com.opensymphony.xwork2.Action;
 6 import com.opensymphony.xwork2.ActionInvocation;
 7 import com.opensymphony.xwork2.interceptor.Interceptor;
 8 
 9 
10 public class AuthenticationInterceptor implements Interceptor  {
11 
12      private static final long serialVersionUID = 1L;
13      
14      private String message;
15     
16      public static final String USER_SESSION_KEY = "UserSessionKey";
17      
18      public void destroy() {}
19 
20      public void init() {}
21 
22      public String intercept(ActionInvocation actionInvocation) throws Exception {
23          //取得Session
24          Map session = actionInvocation.getInvocationContext().getSession();
25          //从Session里获得登录时保存进session的User类
26          User user = (User) session.get(USER_SESSION_KEY);
27          //如果用户为空,返回登录页面       
28          if (user==null||!user.getGrade().equals("2")) {
29              this.setMessage("您没登陆或不是管理员");
30             return Action.INPUT;           
31          }        
32          return actionInvocation.invoke();//返回验证通过
33     }
34 
35     public String getMessage() {
36         return message;
37     }
38 
39     public void setMessage(String message) {
40         this.message = message;
41     }
42 }

用户登录的 action 类代码如下:

 1 import java.util.Map;
 2 
 3 import org.apache.struts2.interceptor.SessionAware;
 4 import org.dao.impl.UserDaoImpl;
 5 import org.model.User;
 6 import org.web.interceptor.AuthenticationInterceptor;
 7 
 8 import com.opensymphony.xwork2.ActionSupport;
 9 
10 public class UserLoginAction extends ActionSupport implements SessionAware{
11     private UserDaoImpl dao = new UserDaoImpl();
12     
13     private String username;
14     private String password;
15     private Map session;
16     
17     @Override
18     public String execute() throws Exception {
19         User user = dao.isValidUser(username, password);
20         if (null != user) {
21             session.put(AuthenticationInterceptor.USER_SESSION_KEY, user);
22             return SUCCESS;
23         } else {
24             addActionError("用户名与密码不匹配");
25             return INPUT;
26         }
27     }
28     
29     public String getUsername() {
30         return username;
31     }
32 
33     public void setUsername(String username) {
34         this.username = username;
35     }
36 
37     public String getPassword() {
38         return password;
39     }
40 
41     public void setPassword(String password) {
42         this.password = password;
43     }
44     
45     public Map getSession() {
46         return session;
47     }
48 
49     public void setSession(Map session) {
50         this.session = session;
51     }
52 }

这样就把登录用户以 User 类的实例形式存储起来。每次要取出来使用的时候,只需实现 SessionAware 借口,并通过 Map session; session.get(...)的方式即可。如注销用户登录时的代码如下:

 1 import java.util.Map;
 2 
 3 import org.apache.struts2.interceptor.SessionAware;
 4 import org.model.User;
 5 import org.web.interceptor.AuthenticationInterceptor;
 6 
 7 import com.opensymphony.xwork2.ActionSupport;
 8 
 9 public class UserLogoutAction extends ActionSupport implements SessionAware{
10     
11     private Map session;
12     
13     public String execute()throws Exception{
14         
15         //从session取出登陆用户
16         System.out.println("******************session====" + session);
17         User user =(User)session.get(AuthenticationInterceptor.USER_SESSION_KEY);        
18         if(user!=null){
19             //从session删除用户
20             session.remove(AuthenticationInterceptor.USER_SESSION_KEY);
21             addActionError("已注销");
22         }
23         return INPUT;    
24     }
25     
26     public Map getSession() {
27         return session;
28     }
29 
30     public void setSession(Map session) {
31         this.session = session;
32     }
33 }
原文地址:https://www.cnblogs.com/lihuiyy/p/2536195.html