我正在使用Spring Boot应用程序,在该应用程序中,我通过如下扩展UserDetails创建了CustomUserDetails类。
QProcess p;
QStringList params;
params << "createJSON.py";
p.start("python.exe", params);
p.waitForFinished(-1);
QString p_stdout = p.readAll();
我需要在UserDetails对象中修改租户详细信息。为此,我已经检查了
How to update Spring Security UserDetails impls after successful login?
https://dev.to/onlineinterview/user-account-loginregistration-feature-with-spring-boot--3fc3
控制器在这里,我正在更新身份验证对象:
public class CustomUserDetails
extends org.springframework.security.core.userdetails.User {
private static final long serialVersionUID = 1L;
/**
* The extra field in the login form is for the tenant name
*/
private String tenant;
private Long userId;
private String firstName;
private String middleName;
private String lastName;
private String email;
private String role;
我的问题是,当我遇到另一个执行特定操作的请求时,我没有在从
获取的CustomUserDetails对象中找到租户详细信息。SecurityContextHolder.getContext()。getAuthentication()
请让我知道如何更新或修改Authentication的UserDetails对象并保存回去,以便另一个请求获得更新的CustomUserDetails。
答案 0 :(得分:1)
UserDetails
应该设置为Principal
的{{1}},而不是java docs建议的UsernamePasswordAuthenticationToken
:
AuthenticationManager实现通常会返回一个 包含更丰富的信息作为使用主体的身份验证 通过应用程序。许多身份验证提供程序将创建一个 UserDetails对象作为主体。
Details
中的 Details
通常是存储用户的IP地址或证书序列号等。
因此将其更改为:
UsernamePasswordAuthenticationToken