You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Tomcat应用的JSTL <c:forEach>中为链接添加CSRFToken?

解决Tomcat中循环内链接添加CSRFToken的问题

你目前通过response.encodeURL()给表单action添加CSRFToken的方式是可行的,但循环里的<a>标签直接用EL表达式输出URL不会自动触发编码,这里提供几种实用方案:

方案一:使用JSTL的<c:url>标签

JSTL的<c:url>标签会自动调用encodeURL()方法,帮你把CSRFToken附加到URL上。首先确保页面已引入JSTL核心标签库:

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

然后修改循环内的<a>标签:

<td align="center">
  <c:url var="encodedCommentUrl" value="${forsale.commentUrl}" />
  <a href="${encodedCommentUrl}">${forsale.name}</a>
</td>

<c:url>会自动完成URL编码并附加CSRFToken,最终生成的链接会包含CSRFToken参数。

方案二:在EL中直接调用response.encodeURL()

你也可以直接在EL表达式里调用内置response对象的encodeURL()方法,传入目标URL:

<td align="center">
  <a href="${response.encodeURL(forsale.commentUrl)}">${forsale.name}</a>
</td>

这种方式无需额外引入标签库,直接利用Tomcat内置对象完成编码和Token附加。

方案三:手动拼接CSRFToken(不推荐)

如果前两种方式不适用,可手动从会话中获取CSRFToken并拼接到URL末尾:

<td align="center">
  <a href="${forsale.commentUrl}${forsale.commentUrl.contains('?') ? '&' : '?'}CSRFToken=${sessionScope.CSRFToken}">${forsale.name}</a>
</td>

需要注意判断原URL是否已有参数,决定用&还是?拼接,但这种方式需要确保会话中存在CSRFToken属性,灵活性不如前两种,不优先推荐。

内容的提问来源于stack exchange,提问作者TaihouKai

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 16:10:33