package com.ycsoft.commons.interceptor; import static com.ycsoft.commons.constants.Environment.CONTEXT_PATH; import static com.ycsoft.commons.constants.Environment.SSO_TOKEN_PARAM_KEY; import static com.ycsoft.commons.constants.Environment.TOGGLE_SYSTEM_PROCESS_METHOD; import static com.ycsoft.commons.constants.Environment.USER_IN_SESSION_NAME; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; import org.apache.struts2.ServletActionContext; import com.opensymphony.xwork2.ActionInvocation; import com.opensymphony.xwork2.interceptor.AbstractInterceptor; import com.ycsoft.beans.system.SOptr; import com.ycsoft.commons.abstracts.BaseAction; import com.ycsoft.commons.action.SsoUnit; import com.ycsoft.commons.helper.JsonHelper; import com.ycsoft.commons.helper.WebHelper; import com.ycsoft.commons.pojo.ExceptionData; import com.ycsoft.commons.pojo.Root; /** * <p>验证请求是否已经登陆成功。</p> * 简单的验证当前的请求<code>Session</code>中是否存在操作员信息 * * @author <a href='mailTo:huanghui2004@hotmail.com'>hh</a> */ public class LoginValidInterceptor extends AbstractInterceptor { /** * */ private static final long serialVersionUID = -7594309987971245981L; @Override public String intercept(ActionInvocation invocation) throws Exception { HttpServletRequest request = ServletActionContext.getRequest(); HttpSession session = request.getSession(true); String ssoSid = WebHelper.getCookieValue(request, SSO_TOKEN_PARAM_KEY); String actionName = invocation.getProxy().getActionName(); if(actionName.startsWith(TOGGLE_SYSTEM_PROCESS_METHOD) || actionName.startsWith("gologin")){ }else{ Object action = invocation.getAction(); if( action instanceof BaseAction){ Object user = session.getAttribute( USER_IN_SESSION_NAME); if (null == user) { String jsonOptr = SsoUnit.checkSso(ssoSid, session.getId(), request.getContextPath()); session.setAttribute(USER_IN_SESSION_NAME, jsonOptr); session.setAttribute(SSO_TOKEN_PARAM_KEY, ssoSid); session.setAttribute(CONTEXT_PATH, request.getContextPath()); } if(null == user) { ExceptionData msg = new ExceptionData(); msg.setType(ExceptionData.LOGIN_EXCEPTION); msg.setTitle("错误"); msg.setContent("操作员信息丢失,请重新登录!"); BaseAction ba = (BaseAction)action; Root root = ba.getRoot(); root.setException(msg); root.setSuccess(false); return "json"; }else{ BaseAction ba = (BaseAction)invocation.getAction(); SOptr optr = JsonHelper.toObject(user.toString(), SOptr.class); ba.setOptr(optr); } } } // invoke next interceptor or action return invocation.invoke(); } }