【问题标题】:STRUTS2 - Value stack values are passed in URL!STRUTS2 - 值堆栈值在 URL 中传递!
【发布时间】:2011-01-18 18:40:52
【问题描述】:

我需要一种解决方案来隐藏或编码 URL 中的“值堆栈”值。

如果在 struts.xml 文件中结果是一个 jsp,则“值堆栈”值显示在 URL 中: 例子

 <action name="actionName" class="ActionClass">
      <result name="resultReturned">page.jsp</result>
    </action>

我找到了 1 个解决方案。 1)当我们重定向到另一个动作时,值不会显示在 url 中。 示例:

 <action...>
    <result name="resultReturned" type="redirectAction">ActionNameX</result>
    ..
    </action>

<action name="ActionNameX" >
...
</action>

还有其他解决办法吗?

谢谢!

【问题讨论】:

  • 在您的问题中包含登录表单的操作和 JSP 代码。值堆栈值不通过 URL 传递。如果在 URL 中传递参数,那是因为您的表单设置为 GET 而不是 POST。永远不要将登录表单设置为 GET。
  • 好的,成功了!默认情况下它认为它是 GET .. 谢谢 :)

标签: java struts2


【解决方案1】:

您的意思是您的表单值是在 URL 中传递的?依次设置在操作上,然后成为值堆栈的一部分...只需使用带有 method="POST" 的普通 html 表单,尽管请记住隐藏 URL 值会使书签变得困难,实际上只会让您感觉更好,没有什么比它更安全的了,因为它可能会让你产生一种虚假的安全感。

【讨论】:

  • 保护谁?你到底想防止什么?
  • 我给你举个例子:当用户登录时,如果他基于我的struts.xml登录失败(密码错误- LOCKED用户- DEACTIVATED用户...),它应该转到 login.jsp ==> 在这种情况下,用户名和密码显示在 URL 中。
  • 另一方面,如果我使用我建议的解决方案(在我的问题中),问题是值堆栈被清空,我需要一些值(notificationMethod,用户名)
  • 最简单的解决方案是在您的操作中只使用密码设置器而不使用获取器。 Struts2 只从公共 getter 中读取(公共领域也是如此)。
猜你喜欢
  • 1970-01-01
  • 2015-05-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多