Struts 2 - 在身份验证拦截器之后重定向到正确的操作

时间:2013-08-23 19:23:46

标签: java authentication redirect struts2 actionresult

我在网上找不到任何东西所以我会问这里。我正在使用strut2并且我有一个私有的操作包,因为某些操作需要登录才能访问。所以我在我的安全包中有这个:

<interceptors>
    <interceptor name="authenticationInterceptor" class="com.koorde.interceptor.AuthenticationInterceptor"/>

    <interceptor-stack name="secureStack">
      <interceptor-ref name="authenticationInterceptor"/>
      <interceptor-ref name="defaultStack"/>    
    </interceptor-stack>
</interceptors>

<default-interceptor-ref name="secureStack"/>

<global-results>
    <result name="login" type="redirect">dologin</result>
    <result name="session_error" type="redirect"> html/error/hibernate_session.jsp</result>
    <result name="error" type="redirect"> html/error/hibernate_session.jsp</result>
</global-results>

当然还有其他行动定义。

我的问题如下:

假设用户想要访问他的个人区域。他点击了personalArea链接,他将自动重定向到登录页面(因为personalArea是一个安全的操作)。我想要的是:登录后用户自动重定向(继续操作)到personalArea而不是主页。

所以,我想要的是:当用户因安全操作登录系统时,登录后执行动作(安全)继续。

我该怎么做?

2 个答案:

答案 0 :(得分:2)

其中一种可能的解决方案是跟踪用户拦截其网址的情况。您可以在身份验证拦截器中执行此操作。

String queryString = request.getQueryString();
session.put("savedUrl", request.getRequestURI()+(queryString==null?"":("?"+queryString))); 

使用动态参数

的全局结果
@Results({
  @Result(name = "return", type = "redirect", location = "${savedUrl}")
})
登录后

检查savedUrl的会话并返回结果"return"。假设为动态参数提供getter。

答案 1 :(得分:0)

最后我能够让它发挥作用。基本上我从Roman C.提出的解决方案中遗漏的是我需要保存一个类变量(因此不仅仅在会话中有它)。

private String savedUrl;

public String getSavedUrl(){
    return savedUrl;
}

这就是诀窍。

由于