2010-08-14 359 views
6

我正在尝试重定向到用户尝试登录的页面。如何获取请求URL?

我的意思是,somepage→登录→somepage

我知道这个;

在LoginAction中

HttpServletRequest request = ServletActionContext.getRequest(); 
String url = request.getServletPath(); 
setUrl(url); 

在struts.xml中

<action name="LoginPro" method="login" class="LoginAction"> 
    <result type="redirect">${url}</result> 
    <result name="input" type="tiles">login.error</result> 
</action> 

但它不工作。 请求的url始终是“LoginPro”,它正在处理登录过程。 当用户点击登录按钮时,页面进入LoginPro。所以请求url始终是loginPro ...

它似乎是这样; somepage→登录→loginPro→LoginAction(请求url是loginPro ..)→loginPro

如何将用户重定向到他们尝试登录的页面?

+0

是否可以选择让每个页面包含一个隐藏的输入或URL参数以传递给登录操作?它的值可以是当前页面,然后你可以设置你的重定向'$ {url}'。 – Pat 2010-08-15 00:20:25

+0

我试过你的选择..我在登录JSP中添加<%= request.getServletPath()%>,它的值是这样的... /MyContextPath/tiles/MyTilesLayout.jsp ...我不知道但是它以某种方式与瓷砖相关。 – Deckard 2010-08-15 14:16:06

回答

5

感谢您的回答。

我发现这种方式,它的工作原理!

url = request.getHeader(“referer”);

此网址是动作被调用的确切网址。

+0

谢谢!很有用! – 2014-06-03 11:51:23

0

如何重定向到您的登录操作?如果只有一个地方(或重定向的一些公共基地)可以向会话添加一个变量,请使用Login Action操作SessionAware,然后在成功登录后检索/删除源URL,然后使用它?

+0

我的登录表单总是位于页面的左侧部分(由瓦片包含)。而..抱歉,我不明白你的意思。我不知道如何在会话中查找URL ..? – Deckard 2010-08-15 14:11:04

+0

我的意思是,假设您想访问需要登录的某个位置。您是否说“您需要在此登录”并提供链接,或者您是否返回“登录”结果并重定向至登录操作? – 2010-08-15 14:57:17

3

当你点击一个Login的链接,然后在java后面的那个请求存储url作为静态变量。

static String url = request.getHeader("referer");</p> 

然后在插入登录详细信息后,您可以调用其他方法。使用该静态变量来重定向。

例如:我用在我的网站。

<action name="login" class="actions.Login.LoginAuthenticate" method="input">  
    <!--Cookie functionality done --> 
    <result name="input">Login/login.jsp</result> 
</action> 

<action name="loginAuthenticate" class="actions.Login.LoginAuthenticate" method="execute"> 
     <!--Cookie functionality done --> 
     <result name="redirect" type="redirect">${redirectUrl}</result> 
     <result name="input">Login/login.jsp</result> 
</action> 

public String execute() throws Exception { 
    if(getCheckCookies()){ 
      setRedirectUrl("/login"); 
      return "redirect"; 
    } 
    Cookie un = new Cookie("un" , lemail); 
    un.setMaxAge(-1); 
    un.setVersion(1); 
    servletResponse.addCookie(un); 
    System.out.println("------>--------->------> " + redirectUrl); 
    return "redirect"; 
} 


public String input() throws Exception { 
    HttpServletRequest request = ServletActionContext.getRequest(); 
    setRedirectUrl(request.getHeader("Referer")); 
    return INPUT; 
} 

public static String redirectUrl; 

public void setRedirectUrl(String redirectUrl){ 
    this.redirectUrl = redirectUrl; 
} 
public String getRedirectUrl(){ 
    return this.redirectUrl; 
}