隐藏从jsp传递到struts2动作类的参数

Posted

技术标签:

【中文标题】隐藏从jsp传递到struts2动作类的参数【英文标题】:hide passed parameter from jsp to struts2 action class 【发布时间】:2013-04-28 21:02:57 【问题描述】:
<s:url action="someAction" var="act">
<s:param name="param1">value1</s:param>
</s:url>
<s:a href="%act">Go Action</s:a>

点击“开始行动”链接,地址将为www.example.com/someAction?param1=value1 我想在提交表单时隐藏传递的参数(param1=value1),例如 method="POST"。无论如何我可以做到吗?谢谢。

【问题讨论】:

如果你想要一个 GET 就不行。但是为什么要隐藏参数值呢?如果是出于安全原因,那么这不是正当理由。任何能够在浏览器中按 F12 的人都能够找到传递了哪些参数,即使是 POST。 【参考方案1】:

没有一个 URL 是一个 GET 请求。如果您想发布,您可以使用表单进行发布请求。如果您想要一个按钮或链接来执行发布请求,最好使用 JS/jQuery 隐藏表单并将按钮/链接单击事件绑定到提交表单。

Struts2 无法控制客户端,只有 html、CSS 和 JS。

正如 JB Nizet 所说,如果是关于保护您的信息,请参阅此处的讨论:How to send password securely over HTTP?

在 get 请求中发送大多数数据(密码除外!)几乎没有问题,因为如果它是一个表单,那么有人可以很容易地看到表单的内容,而在 url 中查看参数肯定更难。

从服务器安全的角度来看,您应该始终假设客户端能够并且将能够发送最糟糕的数据。这就是为什么 struts2 中的验证框架如此易于使用的原因,并且与原始的 Web 编程系统不同,类型转换是一个巨大的帮助。如果您有一个 int 属性并在查询中使用它,您就会知道它将是 int 而不是 String。如果您需要 String 最好使用 Enum 来确保该值是允许的。

【讨论】:

【参考方案2】:

要隐藏传递的参数实际上你需要提交表单。您应该阻止 click 事件的默认行为并将其替换为 form 事件。像本例那样做

<s:form id="f1" action="someAction">
  <s:hidden name="param1" value="value1"/>
  <s:url action="someAction" var="act"/>
  <s:a id="a1" href="%act">Go Action</s:a>
  <script type="text/javascript">
    $(document).ready(function() 
      $("#a1").click(function(event) 
        event.preventDefault();
        $("#f1").submit();
      );
    );
  </script>
</s:form>

【讨论】:

以上是关于隐藏从jsp传递到struts2动作类的参数的主要内容,如果未能解决你的问题,请参考以下文章

如何将 Struts 2 动作类中的 InputStream 值传递给 JSP 页面中的 Ajax 并将该值转换为 JSON 数组

Struts2 jquery 插件网格:选择行时,调用动作并隐藏网格中的行

struts2怎么向jsp传递参数

如何将参数从JSP传递给Struts 2动作

Struts2标记中的HTML标记

JAVA后台 关于如何从后台传递信息在jsp前端