java - 在 JSP EL 表达式中获取 Spring Security Principal

标签 java spring jsp spring-mvc spring-security

我正在使用 Spring MVC 和 Spring Security 版本 3.0.6.RELEASE。在我的 JSP 中获取用户名的最简单方法是什么?甚至只是用户是否登录?我可以想到几种方法:

1。使用小脚本

使用这样的脚本来确定用户是否登录:

<%=org.springframework.security.core.context.SecurityContextHolder.getContext()
    .getAuthentication().getPrincipal().equals("anonymousUser")
    ? "false":"true"%>

不过,我不喜欢使用 scriptlet,我想在某些 <c:if> 中使用它。标签,这需要将其作为页面属性放回。

2。使用 SecurityContextHolder

我可以再次使用我的 @Controller 中的 SecurityContextHolder并将其放在模型上。不过,我在每个页面上都需要这个,所以我宁愿不必在每个 Controller 中添加这个逻辑。

我怀疑有一种更清洁的方法可以做到这一点......

最佳答案

检查 Spring 安全标签:<sec:authentication property="principal.username" />

http://static.springsource.org/spring-security/site/docs/3.0.x/reference/taglibs.html

您可以检查是否已登录:

<sec:authorize access="isAuthenticated()"> 

而不是 c:if

关于java - 在 JSP EL 表达式中获取 Spring Security Principal,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9048995/

相关文章:

java - 使用多个过滤器的 Java Stream 搜索列表

java - 非法状态异常 : Cannot find changelog location: class path resource (liquibase)

java - 在 Spring Security 中实现自定义身份验证

jsp - 使用 s :url in s:a in struts2

javascript - 使用 servlet 隐藏 url 中的数据

java - EntityManager 抛出 @OnetoMany 映射异常

java - 在不同的包/应用程序之间保存数据

java - Intellij IDEA 无法解决 Gradle 依赖关系

java - 使用 Spring Boot 2.7 连接 H2 数据库

java - JSP Scriptlet中文字符串比较