0

我在我的应用程序中使用 Struts2。在我的应用程序中,我有一个登录表单和一个主页。成功登录后,我调用了主页,并在该主页内调用了另一个操作。到目前为止,一切正常,成功登录后也会显示页面,但是当我按下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。这将确保用户不会两次提交表单。它还确保浏览器指向新的 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 回答