我可以将jsp标记返回值存储在变量中而不将其强制转换为字符串吗?

时间:2012-11-29 16:57:55

标签: jsp jstl el

<c:set var="userProfile"><sec:authentication property="principal" /></c:set>

我有一个传统的安全系统,我正在移植到Spring安全系统。在这种情况下,我想简单地将用户主体存储在变量中,这是所有遗留代码所期望的变量。

现在变量userProfile包含principal.toString()。

这可能最好转移到控制器,但是出于兴趣,有一种简单的方法可以在jsp页面中实现这一点吗?

1 个答案:

答案 0 :(得分:0)

在正文中设置<c:set>值的问题在于它始终是一个字符串(将正文内容评估为字符串)。如果使用value属性,则结果为评估值的类型:

<c:set var="userProfile" value="${...}" />

但只有当你有“暴露”的东西要进行评估时,上述情况才有可能。

我假设<sec:authentication>标记是Spring Security's taglibs的一部分?如果是这种情况,你使用它的方式是导致字符串强制(而不是<c:set>)。

标记可以将属性值写入输出流(作为字符串),也可以将属性“公开”为变量。在后一种情况下,这应该做你需要的:

<sec:authentication property="principal" var="userProfile" />