Code Bye

求指导!关于Struts2拦截Session过期返回登录界面

路过的可以说下思路,指导一下,有代码的可以贴一下
如题:
需要实现:用户Session过期,自动跳转到登录界面。
下面是本人的Struts.xml配置的代码,具体拦截代码在LoginInterceptor里实现
	<package name="struts-shop" extends="struts-default">
   <interceptors>
		<interceptor name="loging" class="com.enterprise.interceptor.LoginInterceptor"/>
		<interceptor-stack name="mydefalut">
			<interceptor-ref name="defaultStack"/>
			<interceptor-ref name="loging"/>
		</interceptor-stack>
	</interceptors>
	<default-interceptor-ref name="mydefalut"/>
	<global-results>
		<result name="success">/index/enterpriseIndex.jsp</result>
		<result name="input">/backstage/login/enterpriseLogin.jsp</result>
	</global-results>
	</package>

下面是Action里的代码

public String enterpriseLogin2() throws Exception {
		dataMap = new HashMap<String, Object>();
		Enterprise enterprise1 = enterpriseService.enterpriseLogin(enterprise);
		if (enterprise1.loginname != null) {
			Map session = ActionContext.getContext().getSession();
			session.put("enterprise", enterprise1);
			session.put("loging", "loging");
			return SUCCESS;
		} else {
			return INPUT;
		}
	}

请教在类LoginInterceptor,怎么样具体实现拦截,还有就是对于第一次登录用户的处理。

解决方案

30

基本和过滤器是一个道理啊,登录成功时存session,拦截器判断session能否存在就行了~这是本人以前的代码参考一下
package com.gxz.glpt.interceptor;
import java.util.List;
import java.util.Map;
import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.Interceptor;
//import com.xwtx.yjgl.qxgl.action.LoginAction;
@SuppressWarnings("serial")
public class LoginInterceptor implements Interceptor {
	private String reloginResult;
	private String sessionAttribute;
	private String reloginYsResult;
	private String sessionAttributes;
	private static int FLAG=0;

	@Override
	public void destroy() {
	}
	@Override
	public void init() {
	}
	@Override
	public String intercept(ActionInvocation invocation) throws Exception {

		/**
		 * if(誰的請求)
		 *  檢查該請求的Session
		 *  沒有 return 
		 */
		Map session=invocation.getInvocationContext().getSession();
		String actionName=invocation.getInvocationContext().getName();


		List ysList=(List) ActionContext.getContext().getApplication().get("ysList");
		List ptList=(List) ActionContext.getContext().getApplication().get("ptList");
		if(!session.containsKey(sessionAttributes)&&ysList.contains(actionName)&&session.get("ysuser")==null){
			return reloginYsResult;
		}
		if(!session.containsKey(sessionAttribute)&&ptList.contains(actionName)&&session.get("user")==null){
			return reloginResult;
		}else{
			return invocation.invoke();
		}

	/*	if(session.containsKey(sessionAttribute)||actionName.equals("forwordlogin")){
			return invocation.invoke();
		}else if(session.containsKey(sessionAttributes)||actionName.equals("forwordYslogin")){
			return invocation.invoke();
		}else{
			if(session.containsKey(sessionAttributes)){
				FLAG=1;
			}

			return FLAG==1?reloginYsResult:reloginResult;
		}*/
	}

		/*if (session.get("loginUser") == null) {
			System.out.println("i should interceptor!");
			ServletActionContext.getResponse().sendRedirect("login!loginInput");
			// ActionContext.getContext().put("url", "login!loginInput");
			return null;
		}
		return invocation.invoke();*/

	public void setSessionAttribute(String sessionAttribute) {
		this.sessionAttribute = sessionAttribute;
	}
	public void setReloginResult(String reloginResult) {
		this.reloginResult = reloginResult;
	}
	public void setReloginYsResult(String reloginYsResult) {
		this.reloginYsResult = reloginYsResult;
	}
	public void setSessionAttributes(String sessionAttributes) {
		this.sessionAttributes = sessionAttributes;
	}
}

15


session 三十分钟会自动过期!

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明求指导!关于Struts2拦截Session过期返回登录界面