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