登錄的實現以及sessionout

完成的功能:

1,登錄驗證,用戶和密碼不匹配的時候返回。

2,session值有效時間爲3個小時。

3,不登陸想直接進入頁面的時候,提示登錄,並跳轉到首登錄頁面。


具體實現:

1,登錄驗證。

登錄jsp頁面一般的form表單,並有js執行空的檢查。

提交action,java代碼。成功跳轉到新的頁面,非成功,返回,並傳入錯誤的提示。

2,session值的設定。

登錄的時候將值保存到session中

		Map session=ActionContext.getContext().getSession();
		session.put("users", users);
users是一個bean對象,users包含想要存入的用戶名,密碼,類型等信息。

退出的時候,釋放掉session值

		Map session = (Map)ActionContext.getContext().getSession();
		session.clear();
設置session的有效時間。在web.xml裏配置如下:

	<session-config>
 		<session-timeout>180</session-timeout>
 	</session-config>
3,session爲空的時候,直接跳轉到登錄首頁。

設置攔截器,攔截各個action。注意,攔截器是不能夠攔截jsp頁面的。

在struts.xml裏面配置如下:(每個package裏面都需要加入攔截,攔截器的名字mydefault)

	<interceptors>  
            	<interceptor name="sessionout"  class="com.SessionInterceptor"></interceptor>  
           	 <!-- 攔截器棧 -->  
            	<interceptor-stack name="mydefault">  
            	    <interceptor-ref name="defaultStack" />  
                	<interceptor-ref name="sessionout"/>  
            	</interceptor-stack>  
  	</interceptors>  
  	<global-results>
   		<result name="login" type="redirect">/login/skip.jsp</result>
  	</global-results>
每個方法名下面都有:

 	    <action name="exit" class="login.action.exitAction" method="exit">  
	            <result name="success">/JSP/login.jsp</result> 
	            <interceptor-ref name="mydefault" />   	//這裏是關鍵
	    </action>
以上信息也就是,每次調用action的時候,都會去調用攔截器mydefault,調用class=com.SessionInterceptor

package com;
import java.util.Map;

import bean.Users;

import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
import login.action.loginAction;
//import com.ywjava.utils.Constants;
@SuppressWarnings("serial")
public class SessionInterceptor extends AbstractInterceptor {
 @SuppressWarnings("unchecked")
@Override
 public String intercept(ActionInvocation actionInvocation) throws Exception {
  ActionContext ctx = ActionContext.getContext();
  Map session = ctx.getSession();
  Action action = (Action) actionInvocation.getAction();
  
  if (action instanceof loginAction) {   //如果此時是loginAction,也就是我們的登錄action,則直接執行action
   return actionInvocation.invoke();
  }

  Users user = (Users)session.get("users");
  if (user == null) {                      //如果user是空的,則跳轉到login.action。login.action是全局action,在攔截器下面有配置。完成跳轉到一個頁面,提示							//請登錄的信息,同時跳到登錄首頁
   return Action.LOGIN;
  } else {
   return actionInvocation.invoke();        //其他的情況,正常跳轉
  }
 }
}










發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章