gpt4 book ai didi

spring - 使用 spring security 存储登录用户的附加详细信息

转载 作者:行者123 更新时间:2023-12-02 04:11:31 27 4
gpt4 key购买 nike

我正在寻找正确的方法来使用 Spring Security 在我的应用程序中存储和显示登录用户的其他详细信息。

例如,我想在每个页面的顶部显示欢迎:Mr.Smith(数学部管理员)。为此,我想获取登录用户的前缀、姓氏、职务和部门。

我正在使用自定义的UserDetails 服务从数据库中获取用户。在浏览时,我发现 AuthenticationgetDetails(),它可以存储与身份验证相关的其他详细信息,我可以使用该方法来存储其他详细信息吗?

如果是的话,你能举一个简单的例子吗?我可以使用 AuthenticationSuccessHanlder 来完成这项工作,还是我以完全错误的方式看待问题?我不应该在 Spring 安全层中处理这个问题吗?我应该去哪里处理它?<​​/p>

最佳答案

除了您已经确定的自定义身份验证提供程序(UserDetailsS​​ervice 的实现)的需求之外,还可以通过自定义框架提供的默认值来完成此操作再远一点。

该框架提供了一个 UserDetails 接口(interface)及其一些实现,例如 User 类等。

示例

在我的一个应用程序中,我需要一个人,但不一定是该应用程序的用户。

我的方法是扩展已经提供的 Spring Security User 并让我的 UserDetailsS​​ervice 实现返回它。

public class RequestUserDetails 
extends org.springframework.security.core.userdetails.User {
private static final long serialVersionUID = -6411988532329234916L;
private Integer personId;

public RequestUserDetails(String username, String password, Integer personId,
Collection<? extends GrantedAuthority> authorities) {
super(username, password, authorities);
this.personId = personId;
}

public Integer getPersonId() {
return personId;
}
}

+

@Service
public class UserSecurityService
implements org.springframework.security.core.userdetails.UserDetailsService {
[...]
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
[...]
return new RequestUserDetails(
userCreds.getLogin(),
userCreds.getPassword(),
person.getId(),
getAuthorities(domainUser.getRoles())
);
}
}

简单用法:

  • 在带有 javax.security.Principal 参数的 Controller 级别(不依赖于 Spring MVC):

    ( (RequestUserDetails) ((Authentication)principal).getPrincipal() ).getPersonId()
  • 在与 Spring MVC @Controller 注释绑定(bind)的 Controller 级别,带有 Authentication 参数:

    ( (RequestUserDetails)authentication.getPrincipal() ).getPersonId()

如果您需要有关 Spring Security UserDetails 的更多引用,请访问 API javadocs

关于spring - 使用 spring security 存储登录用户的附加详细信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13556349/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com