2014-01-17 59 views
2

我爲我的web應用程序使用Struts 2並使用身份驗證部分。我想知道什麼時候重定向頁面(操作),我該如何更改它重定向到的顯示的URL而不是從?Struts 2 - 重定向頁面並顯示不同的URL

例如,我有一個login.action頁面將提交到authentication.action,並且如果用戶名和密碼正確,它將被重定向到securePage.action。

我知道如何做重定向部分(我試過鏈和redirectAction結果類型)。我想要的是,當頁面被重定向到安全頁面時,URL將顯示..../securePage.action。現在,它仍然使用會話ID進行身份驗證。

我分享我的struts.xml的一部分下面

<action name="login"> 
    <result>index.jsp</result> 
</action> 
<action name="authentication" class="com.myapp.action.AuthenticationAction"> 
    <result name="success" type="chain">hello</result> 
    <result name="failure">index.jsp</result> 
</action> 
    <action name="hello" 
     class="com.myapp.action.HelloWorldAction" 
     method="execute"> 
     <interceptor-ref name="myDefault"/> 
     <result name="success">/HelloWorld.jsp</result> 
     <result name="failure">index.jsp</result> 
    </action> 

login.action將剛打開的index.jsp,這是將提交驗證的登錄名爲

身份驗證的操作類只需從登錄中獲取用戶名和密碼,並在會話值「已授權」時將其設置爲「已授權」,如果用戶名和密碼不匹配,則該值爲已通過或重定向。

認證將使用結果類型鏈重定向到hello(安全頁面)。

hello的動作使用我自己的authInterceptor來檢查會話值 - 當前會話是否被授權。如果不是,請返回登錄。

+0

在重定向操作的情況下,你指定的結果動作(錯誤/成功)?並且您是否使用URL映射了這些操作? – Ved

+0

你可以分享你的struts.xml嗎?我想看到幾件事情 –

+1

如果URL在*重定向過程中沒有改變,那麼你沒有做重定向。 –

回答

1

而不是使用type="chain",請嘗試推薦使用type="redirectAction"的方法。

改變當前鏈條動作

<action name="authentication" class="com.myapp.action.AuthenticationAction"> 
    <result name="success" type="redirectAction"> 
     <param name="actionName">hello</param> 
     <param name="namespace">/</param> 
    </result> 
    <result name="failure">index.jsp</result> 
</action> 
<action name="hello" 
    class="com.myapp.action.HelloWorldAction" 
    method="execute"> 
    <interceptor-ref name="myDefault"/> 
    <result name="success">/HelloWorld.jsp</result> 
    <result name="failure">index.jsp</result> 
</action> 

有關詳細信息,看看到文檔here

+0

我按照您的指示進行了操作,但網址保留.../authentication.action在頁面重定向後。 – ChrisZ

相關問題