路过的可以说下思路,指导一下,有代码的可以贴一下
如题:
需要实现:用户Session过期,自动跳转到登录界面。
下面是本人的Struts.xml配置的代码,具体拦截代码在LoginInterceptor里实现
如题:
需要实现:用户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 三十分钟会自动过期!