使用spring 3 security在jsp页面中访问我的自定义用户对象
Posted
技术标签:
【中文标题】使用spring 3 security在jsp页面中访问我的自定义用户对象【英文标题】:Accessing my custom user object in jsp page, using spring 3 security 【发布时间】:2011-12-10 02:44:00 【问题描述】:我已经实现了UserDetailsService
,它返回一个MyUser
的实例(它实现了UserDetails
)
public MyUser loadUserByUsername(String arg0)
现在我想在我的 JSP 页面中访问 MyUser
上的自定义 getter/字段,到目前为止我得到了这个:
$pageContext.request.userPrincipal.name
但这仅允许访问Principal 对象。如何访问MyUser
对象?
【问题讨论】:
【参考方案1】:在我添加的jsp页面中很容易:
<%@ taglib prefix="sec" uri="http://www.springframework.org/security/tags" %>
...
<sec:authentication property="principal.firstname" />
principal 实际上是 MyUser 的一个实例,因此“名字”可以是我的任何自定义 getter 和 setter
【讨论】:
【参考方案2】:分析HTTPSesson后,在成功登录后立即发现有一个名为SPRING_SECURITY_CONTEXT的属性。例如,我的自定义 UserDetails 具有名为 user 的对象,该对象具有属性 firstName。在 JSP 中,该属性的值可以通过以下方式获得:
$sessionScope.SPRING_SECURITY_CONTEXT.authentication.principal.user.firstName
【讨论】:
对我来说 '$sessionScope.SPRING_SECURITY_CONTEXT.authentication.principal.email' 工作得就像我在 '' 标签中看到的一样'principal.firstname'【参考方案3】:如果您的 MyUser
对象实现了 Principal
并且您在成功登录时将其置于 http 会话中,您可以从会话中获取它并进行转换。
您可以在其中实现AuthenticationSuccessHandler
注入您的UserDetailsService
并将其放置在会话中。
然后您可以将您的AuthenticationSuccessHandler
注入处理<form-login>
元素的UsernamePasswordauthenticationFilter
。
如果您提供有关您的安全上下文配置的详细信息,我可以为您提供更多详细信息。
【讨论】:
我同意 100%,我如何“在成功登录时将其放置在 http 会话中,您可以从会话中获取并投射它。” @NimChimpsky 请粘贴您的安全配置的一些相关部分。我会更详细地编辑我的答案。 谢谢你的帮助,我有解决方案,会发布。以上是关于使用spring 3 security在jsp页面中访问我的自定义用户对象的主要内容,如果未能解决你的问题,请参考以下文章
如何配置 Spring Security 以允许在 JSP 页面中使用 hasPermission?
如何使用 Spring Security 在 login.jsp 页面显示登录错误消息?
是否可以使用jsp登录表单作为spring security的自定义登录表单
我们应该使用啥来代替 Spring Security 的 JSP 标签库来在 HTML 页面中的客户端具有安全性?