首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在JSP EL表达式中获取Spring安全主体

在JSP EL表达式中获取Spring安全主体
EN

Stack Overflow用户
提问于 2012-01-29 05:57:39
回答 11查看 72.4K关注 0票数 46

我使用的是Spring MVC和Spring Security版本3.0.6.RELEASE。在我的JSP中获取用户名最简单的方法是什么?或者仅仅是用户是否已登录?我可以想出几种方法:

1.使用scriptlet

使用像这样的scriptlet来确定用户是否已登录:

代码语言:javascript
运行
复制
<%=org.springframework.security.core.context.SecurityContextHolder.getContext()
    .getAuthentication().getPrincipal().equals("anonymousUser")
    ? "false":"true"%>

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

2.使用SecurityContextHolder

我可以再次从我的@Controller中使用SecurityContextHolder并将其放到模型上。不过,我需要在每个页面上都添加这个逻辑,所以我不希望在每个控制器中都添加这个逻辑。

我怀疑有一种更干净的方法来做这件事...

EN

回答 11

Stack Overflow用户

回答已采纳

发布于 2012-01-29 06:17:33

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

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

您可以检查是否已记录:

代码语言:javascript
运行
复制
<sec:authorize access="isAuthenticated()"> 

不是c:if

票数 61
EN

Stack Overflow用户

发布于 2013-07-03 15:26:17

我知道在这个帖子里还有其他答案,但没有一个回答你如何检查用户是否通过了身份验证。所以我分享了我的代码是什么样子的。

在您的项目中包含标记库:

代码语言:javascript
运行
复制
<%@ taglib prefix="sec" uri="http://www.springframework.org/security/tags" %>

然后在当前作用域中创建一个用户对象,方法是添加:

代码语言:javascript
运行
复制
<sec:authentication var="user" property="principal" />

然后,您可以轻松地通过添加来显示用户名。请记住,“主体”对象通常是string类型的,除非您以某种方式实现了spring安全性,以便将其更改为项目中的另一个类:

代码语言:javascript
运行
复制
<sec:authorize access="hasRole('ROLE_USER') and isAuthenticated()">
${user}
</sec:authorize>

我希望这对想要检查用户角色的人有所帮助。

如果您使用的是Maven,则添加Christian Vielma在此线程中提到的依赖标记。

谢谢!

票数 20
EN

Stack Overflow用户

发布于 2013-07-03 05:45:10

您可以这样使用: Spring Security Tag Lib - 3.1.3.RELEASE

代码语言:javascript
运行
复制
<sec:authentication var="principal" property="principal" />

然后:

代码语言:javascript
运行
复制
${principal.username}
票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9048995

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档