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

时间:2015-06-09 11:23:31

标签: java url struts2 passwords url-parameters

有没有办法隐藏param中的struts.xml值,因为当我将这些值从一个操作传递到另一个操作时,它们在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。< / p>

每件事都很好,但两个属性的值在URL上都可见

  

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

有没有办法隐藏这些值,或者URL可以设置为

  

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

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

2 个答案:

答案 0 :(得分:2)

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

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

通过这种方式,系统和数据库管理员都不会知道用户的密码。

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

了解更多信息:

密码讨论除外,如果您想重定向避免网址中的参数,用户体验原因 (和不是安全原因 ),除了将它们放入Session之外,您还可以

  

在着陆页中运行一个使用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>

答案 1 :(得分:1)

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>

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