Spring Boot应用Thymeleaf跳转外部URL被截断异常
故障原因
该跳转异常与Thymeleaf语法、URL渲染逻辑无关,根因是目标资讯站点配置了反盗链/外域来源拦截策略:
- 页面渲染出的a标签href值完全正确,鼠标悬浮时浏览器状态栏显示完整新闻详情地址即可佐证这一点。
- 从本地localhost站点点击链接跳转时,请求会自动携带当前页面的referrer来源标识,目标站识别到请求来自外域后,会自动触发重定向规则,将访问拦截至网站根路径,不予放行到具体新闻详情页。
- 此前修改
th:href写法的操作没有对准问题根源:无论直接输出变量值还是用@{}包裹,最终渲染出的href属性值都是正确的,自然无法解决拦截问题。
修复方案
为所有跳转外站的a标签添加rel="noreferrer noopener"属性,跳转时不携带来源referrer信息,即可绕过目标站的来源拦截规则,修改后的超链接代码如下:
<a th:href="${rate.news_link}" target="_blank" rel="noopener noreferrer" th:text="${rate.HEADLINE}"> </a>
补充说明:
- 外部绝对URL不需要使用Thymeleaf的
@{}语法包裹,@{}的作用是处理站内相对路径、自动拼接项目上下文路径,外站链接直接通过th:href="${rate.news_link}"输出完整地址即可。 - 添加
rel="noopener noreferrer"属性除了绕过来源拦截,还可修复target="_blank"自带的安全漏洞,避免新打开的外站页面获取原页面的操作权限。
内容的提问来源于stack exchange,提问作者Vel_More
相关产品推荐
相关产品推荐

