【问题标题】:Combining Spring Security Tags and Struts2 Tags结合 Spring Security 标签和 Struts2 标签
【发布时间】:2026-01-18 12:05:01
【问题描述】:

我目前正在使用 Spring Security 来管理我的 Struts2 应用程序上的登录和会话。 为了在 JSP 页面中检索登录的用户,我通过将以下内容导入我的 jsp 来使用 sec 标记库。

<%@ taglib prefix="sec" uri="http://www.springframework.org/security/tags"%>

所以要打印我的登录用户,我使用<sec:authentication property="principal.username" />

我正在遍历通过调用的操作接收到的java.util.List,因此通过以下方式对其进行迭代:

<s:iterator value="#request.myList" var="userEmail">
    My value: <s:property value="#userEmail"/>
</s:iterator>

我正在寻找一种方法来测试列表项以检查是否与登录的用户相同,但我无法在&lt;s:if&gt; 标记内检索sec

有人知道如何将两者结合起来吗?并做类似的事情

&lt;s:if test="%{&lt;sec:authentication property="principal.username" /&gt; == #userEmail}"&gt;

【问题讨论】:

  • 你能在测试中使用&lt;s:set var="foo"&gt;&lt;sec:authentication ...&gt;&lt;/s:set&gt; 之类的东西并使用#foo 吗?我不是 100% 相信这个逻辑应该在视图层中,但这是一个单独的问题。
  • 我同意在视图层上保留此类测试的想法似乎很奇怪,但这与决定显示某些样式和 div 相关。
  • 我的意思是访问主要用户名。至少我会把它包装在一个自定义标签中。虽然我猜如果它只是在迭代这样的列表时使用它可能不值得。
  • 顺便说一句,尝试了您的建议,但没有用,但接受的答案有效。
  • Dave 解决方案也应该有效。

标签: struts2 spring-security taglib


【解决方案1】:

只使用会话中的信息怎么样:

<s:if test="#session.SPRING_SECURITY_CONTEXT.authentication.principal.username == #userEmail">

【讨论】: