2010-08-14 66 views
6

Tôi đang cố gắng chuyển hướng đến trang mà người dùng đã cố đăng nhập.Cách nhận URL yêu cầu?

Ý tôi là, somepage → đăng nhập → somepage

Tôi biết điều này;

Trong LoginAction

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

Trong struts.xml

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

Nhưng nó không làm việc. Url được yêu cầu luôn là "LoginPro" đang xử lý quá trình đăng nhập. Khi người dùng nhấp vào nút đăng nhập, trang sẽ chuyển đến LoginPro. Vì vậy, url yêu cầu luôn là loginPro ...

Dường như theo cách này; somepage → đăng nhập → loginPro → LoginAction (yêu cầu url là loginPro ..) → loginPro

Làm cách nào để chuyển hướng người dùng đến trang mà họ đã cố đăng nhập?

+0

Bạn có nên chọn một thông số đầu vào hoặc tham số URL ẩn trên mỗi trang được chuyển đến hành động đăng nhập không? Giá trị của nó có thể là trang hiện tại và sau đó bạn có thể đặt chuyển hướng của bạn '$ {url}' từ nó. – Pat

+0

Tôi đã thử tùy chọn của bạn .. Tôi thêm <% = request.getServletPath()%> vào JSP đăng nhập, và giá trị của nó là như thế này ... /MyContextPath/tiles/MyTilesLayout.jsp ... Tôi không biết nhưng nó bằng cách nào đó liên quan đến gạch những thứ. – Deckard

Trả lời

5

Cảm ơn câu trả lời của bạn.

Tôi đã tìm thấy cách này và nó hoạt động!

url = request.getHeader ("referer");

Url này là url chính xác nơi hành động được gọi.

+0

Cảm ơn bạn! Rất hữu dụng! –

0

Bạn đang chuyển hướng đến hành động đăng nhập của mình như thế nào? Nếu nó chỉ là một nơi duy nhất (hoặc một số cơ sở chung có chuyển hướng), bạn có thể thêm biến vào phiên làm cho SessionAware hành động đăng nhập của bạn và sau đó chỉ cần truy xuất/xóa URL nguồn sau khi đăng nhập thành công và sử dụng?

+0

Biểu mẫu đăng nhập của tôi luôn nằm ở phần bên trái của trang. Và .. xin lỗi tôi không hiểu ý bạn là gì. Tôi không biết cách tìm URL trong phiên ..? – Deckard

+0

Ý của tôi là, giả sử bạn muốn truy cập một số vị trí yêu cầu thông tin đăng nhập. Bạn có nói "Bạn cần đăng nhập ở đây" và cung cấp liên kết hay bạn trả về kết quả 'đăng nhập' và chuyển hướng đến hành động Đăng nhập? –

3

Khi bạn nhấp vào liên kết Đăng nhập thì trong java phía sau yêu cầu lưu trữ url đó dưới dạng biến tĩnh.

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

Sau đó, sau khi chèn chi tiết đăng nhập, u gọi đến phương thức khác. Sử dụng biến tĩnh đó để chuyển hướng.

Ví dụ: Tôi đã sử dụng trong trang web của mình.

<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; 
} 
Các vấn đề liên quan