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

Java 在Struts 2中的身份验证拦截器之后重定向到正确的操作,java,authentication,redirect,struts2,actionresult,Java,Authentication,Redirect,Struts2,Actionresult,我使用的是Struts 2,我有一个私有的操作包,因为某些操作需要登录才能访问。因此,我的安全软件包中有: 多洛金 html/error/hibernate\u session.jsp html/error/hibernate\u session.jsp 当然还有其他动作的定义 我的问题如下: 假设一个用户想要访问他的个人区域。他点击personalArea链接,他将在登录页面上自动重定向(因为personalArea是一个安全操作)。我想要的是:登录后,用户会自动重定向(继续操作)到per

我使用的是Struts 2,我有一个私有的操作包,因为某些操作需要登录才能访问。因此,我的安全软件包中有:


多洛金
html/error/hibernate\u session.jsp
html/error/hibernate\u session.jsp
当然还有其他动作的定义

我的问题如下:

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

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


我该怎么做呢?

一个可能的解决方案是跟踪用户拦截他们的URL。您可以在身份验证拦截器中执行此操作

String queryString = request.getQueryString();
session.put("savedUrl", request.getRequestURI()+(queryString==null?"":("?"+queryString))); 
将全局结果与动态参数一起使用

@Results({
  @Result(name = "return", type = "redirect", location = "${savedUrl}")
})

登录后,检查会话的
savedUrl
,并返回结果
“return”
。假设为动态参数提供getter。

最后,我能够使它工作。基本上,我从Roman C提出的解决方案中遗漏了一点,那就是我需要保存一个类变量(因此不仅要在会话中保存它)

私有字符串savedUrl

public String getSavedUrl(){
    return savedUrl;
}
这就成功了


谢谢,我明天就试试。谢谢,我有第一部分。但是我应该把这个放在哪里呢@结果({@Result(name=“return”,type=“redirect”,location=“${savedUrl}”)})好的,我把它放在类定义(LoginAction)之上,并返回“return”(作为字符串)。但我遇到了严重问题:处理请求时发生异常:没有为action com.koorde.action.LoginAction定义结果,结果返回没有为action com.koorde.action.LoginAction和结果返回定义结果如果您不喜欢注释结果,请在xml中配置它。是的,我正在使用xml。我的问题是:如何将这个${savedUrl}放在xml中?