0

アプリケーションでStruts2を使用しています。私のアプリケーションには、1つのログインフォームと1つのメインページがあります。ログインに成功すると、メインページを呼び出し、そのメインページ内で別のアクションを呼び出しました。これまではすべて正常に機能しており、ログインに成功するとページも表示されますが、F5ブラウザの更新ボタンを押すかクリックすると、ログインページが表示されますが、ボタンを起動F5または更新するのと同じページが必要です。どうすればこれを達成できますか、私struts.xmlは次のとおりです。

..。

<action name="mytable" class="MyDataTable">

        <result name="success" type="json"/>            
        <result name="error">messages.jsp</result>

    </action>
    <action name="edit" class="MyEditAction">

        <result name="input" type="json"></result>
        <result name="success" type="json"></result>
        <result name="error">messages.jsp</result> 

    </action>
    <action name="Login" class="LoginAction">

        <result name="input">login.jsp</result>
        <result name="success">main.jsp</result>            
        <result name="error">messages.jsp</result>

    </action>
    <action name="Logout" class="LogoutAction"> 
        <result name="success">login.jsp</result>
    </action>

..。

ログイン後、main.jspを呼び出し、main.jspからmytableアクションを呼び出しています。メインページを表示した後も、ブラウザのアドレスバーにログインアクションが表示されます

では、どうすればセッションを維持できるか教えてください。

4

1 に答える 1

2

まず、セキュリティ フレームワークの使用を検討する必要があります。Spring Securityの使用をお勧めします。セキュリティの実装を自分で間違って実行できることはたくさんあります。これにより、ユーザーが適切に認証され、多くの攻撃から保護されます。あなたが私たちに与えたコードから、これが整っているようには見えません。

このシナリオでは、いわゆるPost/Redirect/Getパターンを使用します。このパターンは、投稿を行った後、ブラウザーが確実に GET URL にリダイレクトされるようにします。これにより、ユーザーがフォームを 2 回送信することがなくなります。また、ブラウザが新しい URL を指していることも確認します。

Struts2 でこれを行うには、 Redirect Action Resultを使用する必要があります。例もここで解決されます

あなたの場合、これは次のようになります。

...
<action name="Login" class="LoginAction">

    <result name="input">login.jsp</result>
    <result name="success" type="redirect">
        <param name="actionName">displaySalesOrder</param>
        <param name="namespace">/yournamespace</param>
    </result>            
    <result name="error">messages.jsp</result>

</action>

<action name="main" class="MainAction"> 
    <result name="success">main.jsp</result>
</action>
...
于 2012-07-18T08:59:42.760 に答える