有没有办法隐藏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_Id
和Password
。< / p>
每件事都很好,但两个属性的值在URL上都可见
http://localhost:8084/MEMS/Manager/login.action?User_Id=abc%40gmail.com&Password=1234
有没有办法隐藏这些值,或者URL可以设置为
http://localhost:8084/MEMS/Manager/login.action
?
(我仍然应该在其他操作中获取值)
答案 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>
重定向后的另一个操作应该从会话中获取参数。