Struts2 Griff-session-timeout mit Interceptor

Ich versuche zu verarbeiten session-timeout Anfragen in meinem struts2 Anwendung, die mit einem Interceptor. Unten sind die Dateien, die zu diesem Zusammenhang:

Web.xml:

<filter-mapping>
    <filter-name>struts2</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>
<session-config>
    <session-timeout>1</session-timeout>
</session-config>

Struts.xml:

<package name="default" extends="struts-default">
<interceptors>
    <interceptor name="sessionInterceptor"
        class="com.platform.web.security.SessionInterceptor" />
</interceptors>
<action name="doLogin"
    class="com.platform.web.action.LoginAction">
    <result name="input">/login/login.jsp</result>
    <result name="error">/login/login.jsp</result>
    <result type="chain">menuAction</result>
</action>

<action name="menuAction"
    class="com.platform.web.action.MenuAction">
    <interceptor-ref name="sessionInterceptor"/> //Interceptor included here
    <result name="SUCCESS">/jsp/main.jsp</result>
    <result name="ERROR">/login/login.jsp</result>
    <result name="input">/jsp/myFavourite.jsp</result>
</action>

Interceptor-Klasse:

public class SessionInterceptor extends AbstractInterceptor implements StrutsStatics {
/**
 * 
 */
private static final long serialVersionUID = 1L;

@Override
public String intercept(ActionInvocation invocation) throws Exception {

final ActionContext context = invocation.getInvocationContext();
HttpServletRequest request = (HttpServletRequest) context
    .get(HTTP_REQUEST);
HttpSession session = request.getSession(false);

//Is there a "user" object stored in the user's HttpSession?
//Object user = session.getAttribute("User");
if (session == null) {
    //The user has not logged in yet.

    //Is the user attempting to log in right now?
    //String loginAttempt = request.getParameter(LOGIN_ATTEMPT);

    /* The user is attempting to log in. */
    /*if (!StringUtils.isBlank(loginAttempt)) {
    return invocation.invoke();
    }*/
    return "timeout";
 } else {
    return invocation.invoke();
 }
 }
}

LoginAction:

public class LoginAction extends MesActionSupport implements ServletRequestAware {
@Override
public String execute() throws Exception {
setActionNameForAudit("execute123");
FILE_LOGGER.debug("Entering into execute() ... ");
String strSessionId = "";

if (isValidUser == true) {
    user = getUser();

    strSessionId = request.getSession(true).getId();
    setServletRequest(request);
    session.put("SessionId", strSessionId);

    setSession(session, user);

    ServletActionContext.getRequest().getSession().setAttribute("User", user);

    FILE_LOGGER.debug("Exit from  LoginAction.execute() ... ");
    return SUCCESS;
} else {
    return ERROR;
}
 }

MenuAction:

public class MenuAction extends MesActionSupport implements SessionAware, ParameterAware, RequestAware {
@Override
public String execute() throws Exception {
setActionNameForAudit("execute ");
User user = null; //To store current user
Map<String, ArrayList<String>> category = null; //To store all Menu
//Categories.
StringBuffer menu = new StringBuffer(""); //To store Menu String
StringBuffer dashboardMenu = new StringBuffer("");

//user = (User)(request.getSession().getAttribute("User")==null ? null : request.getSession().getAttribute("User")); //Request object IS NULL HERE!!
user = (User) (mapSession.get("User") == null ? null : mapSession
    .get("User")); //mapSession object IS NULL HERE
FILE_LOGGER.debug("user is " + user == null);

if (user != null) {
    menu = menuView.getMenu(user);
    mapSession.put("Menu", menu.toString());
    mapSession.put("dbMenu", dashboardMenu.toString());
    ret = "SUCCESS";
} else if (user == null) {
    ret = ERROR;
} else {
    ret = SUCCESS;
}
return ret;
}

Flow ist wie diese:
1. Login-Bildschirm öffnet sich
2. Benutzer-Anmeldeinformationen und sendet
3. LoginAction heißt, der Benutzer authentifiziert ist
4. Wenn gültige Benutzer - MenuAction aufgerufen. Sonst Umleitung auf Login.jsp

Gemäß dem obigen code, der die session erzeugt wird, in der LoginAction, Steuerung erreicht die Abfangjäger, wo die session-Objekt aktiviert ist. Wenn die Sitzung existiert, wird die Steuerung erreicht MenuAction.

Aber wenn dies geschieht, die request - Objekt wird auf NULL zurückgesetzt! Früher, wenn ich mich nicht mit einen interceptor, der Fluss war die Arbeit völlig in Ordnung zwischen LoginAction und MenuAction.

Gilt der Auffänger setzt die HTTPRequest? und damit die Session? Als Ergebnis bin ich nicht in der Lage, um fortzufahren.

Hilfe?

InformationsquelleAutor DarkKnightFan | 2013-02-06

Schreibe einen Kommentar