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

如何将<security:authentication>标签嵌入form:input的value属性中?

解决Spring表单输入框嵌入认证用户名的问题

这个问题很常见——因为JSP标签不能直接嵌套在另一个标签的属性值里,所以你直接把<security:authentication>放在<form:input>外面才会导致用户名显示在输入框下方。下面给你两种可行的解决办法:

方法一:直接使用EL表达式获取用户名

Spring Security会将当前认证用户的信息暴露给EL上下文,你可以直接在value属性中引用对应的EL表达式:

<form:input path="contactName" cssClass="form-control" placeholder="Enter your Contact Name please." value="${authentication.principal.username}"/>

这种方式最简洁,前提是你的JSP页面已经正确引入了Spring Security的相关配置,并且EL表达式可以正常访问authentication对象。如果这个表达式不生效,你也可以试试${pageContext.request.userPrincipal.name},这是Servlet标准的获取当前登录用户名的方式。

方法二:先将用户名存入页面变量再引用

如果你更习惯使用Spring Security的标签库,也可以先通过<security:authentication>标签把用户名存入一个页面变量,再在<form:input>的value中引用这个变量:

<!-- 先把用户名存到currentUsername变量里 -->
<security:authentication property="principal.username" var="currentUsername"/>

<!-- 引用变量作为输入框的value -->
<form:input path="contactName" cssClass="form-control" placeholder="Enter your Contact Name please." value="${currentUsername}"/>

注意事项

如果你的<form:input>绑定的表单对象(也就是path对应的contactName属性)已经有初始值,那么Spring会优先使用path绑定的值,而不是value属性的值。如果希望默认显示用户名,你可以在控制器中初始化表单对象时,把contactName设置为当前登录用户的用户名,这样即使不设置value属性,输入框也会显示用户名。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 10:02:32