登录的实现以及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();        //其他的情况,正常跳转
  }
 }
}










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