在 Struts 2 中隐藏 struts.xml 值的参数

Hiding param of struts.xml values in Struts 2

有什么方法可以隐藏 struts.xml 中的 param 值,因为当我将它们从一个动作传递到另一个动作时,它们在 URL 上可见?

<action name="BackToManagerIndex" class="Action.LoginAction" method="ManagerList">         
    <result type="redirectAction">
        <param name="actionName">login</param>
        <param name="namespace">../Manager</param>
        <param name="User_Id">%{User_Id} </param>
        <param name="Password">%{Password}</param>
    </result>

在这里,每当 BackToManagerIndex 操作完成时,我会将其重定向到另一个名为 login 的操作,该操作位于具有 2 个属性的命名空间管理器中:User_IdPassword .

一切都很好,但两个属性的值在 URL 上都可见,如

http://localhost:8084/MEMS/Manager/login.action?User_Id=abc%40gmail.com&Password=1234

有什么方法可以隐藏这些值,或者可以将 URL 设置为

http://localhost:8084/MEMS/Manager/login.action ?

(我仍然应该在其他操作中获取值)

redirectAction 结果类型中包含的参数反映在 URL 中。要从 URL 中删除它们,您需要从结果配置中删除它们。

<action name="BackToManagerIndex" class="Action.LoginAction" method="ManagerList">
    <result type="redirectAction">
        <param name="actionName">login</param>
        <param name="namespace">/Manager</param>
    </result>
</action>

重定向后的另一个操作应该从会话中获取参数。

你永远不应该携带这样的密码,事实上你甚至不应该将它存储在会话中。甚至不在数据库中。

您应该对其进行散列并将散列存储在数据库中,然后当用户输入密码登录时,您对插入的密码进行散列并将其与数据库中的散列进行对比。

这样,即使是您,系统管理员和数据库管理员,也不知道用户的密码。

然后黑客将尝试使用彩虹表、散列密码字典,为了防止这种情况,您将在散列中添加一些盐。

阅读更多内容:

  • Struts2: how to store safety username and password from action to action
  • Update object properties

密码讨论另当别论,如果要重定向避开url中的参数对于用户经验原因不是出于安全原因),除了将它们放在会话中,您还可以

run a script in the landing page that make use of HTML5 History API:

<script>
    // BEFORE:
    // http://localhost:8084/MEMS/Manager/login.action?User_Id=abc%40gmail.com&Password=1234
    window.history.pushState("","",window.location.pathname);
    // LATER:
    // http://localhost:8084/MEMS/Manager/login.action
</script>