使用spring 3安全性访问jsp页面中的自定义用户对象

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用spring 3安全性访问jsp页面中的自定义用户对象相关的知识,希望对你有一定的参考价值。

我已经实现了UserDetailsService,它返回MyUser的实例(实现UserDetails

public MyUser loadUserByUsername(String arg0)

现在我想在我的JSP页面中访问MyUser上的自定义getter / fields,到目前为止我得到了这个:

${pageContext.request.userPrincipal.name}

但这只允许访问Principal对象。我怎样才能访问MyUser对象?

答案

它在jsp页面中很容易我添加了这个:

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

如果principal实际上是MyUser的一个实例,那么“firstname”可以是我的任何自定义getter和setter

另一答案

在分析了HTTPSesson之后,在成功登录后立即发现有一个名为SPRING_SECURITY_CONTEXT的属性。例如,我的自定义UserDetails具有名为user的对象,其具有属性firstName。在JSP中,可以使用以下命令达到此属性的值:

${sessionScope.SPRING_SECURITY_CONTEXT.authentication.principal.user.firstName}
另一答案

如果你的MyUser对象实现了Principal并且你在成功登录时将它放在http会话中,你可以从会话中获取它并进行转换。


你可以实现AuthenticationSuccessHandler在那里注入你的UserDetailsService并将其放入会话中。

然后你可以将你的AuthenticationSuccessHandler注入处理UsernamePasswordauthenticationFilter元素的<form-login>

如果您提供有关安全上下文配置的详细信息,我可以为您提供更多详细信息。

以上是关于使用spring 3安全性访问jsp页面中的自定义用户对象的主要内容,如果未能解决你的问题,请参考以下文章

是否可以使用jsp登录表单作为spring security的自定义登录表单

jsp的自定义标签

如何在 Spring Security 中通过 jdbc 身份验证使用自定义登录页面

我们应该使用啥来代替 Spring Security 的 JSP 标签库来在 HTML 页面中的客户端具有安全性?

无法使用 spring mvc 和 $http 访问 CORS 环境中的自定义标头

在 Spring Boot 中使用 Useroles 访问 JSP 页面的权限