完成的功能:
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(); //其他的情況,正常跳轉
}
}
}