我想在我的自定义" userDetail" -object中存储其他信息,但我不确定何时需要将信息添加到对象中。登录发生后,每个方法都需要访问它(JWT-Token登录)SecurityContextHolder.getContext().getAuthentication().getInformation()
我想在生成令牌的时候在我的自定义AuthenticationController中设置它,但这很难,因为此时引用的类型是userDetails,而不是customUserDetails:
UserDetails userDetails = this.userDetailsService.loadUserByUsername(authenticationRequest.getUsername());
//TODO setInformation
String token = this.tokenUtils.generateToken(userDetails);
在身份验证/授权过程中添加此类信息的最佳点是什么,以及我最好如何做到这一点?
答案 0 :(得分:0)
经过进一步研究,用自定义数据填充用户对象的最佳时间点似乎是UserDetails接口的自定义实现的构造函数,同时为User对象设置了权限和其他数据。例如:
public SpringSecurityUser(Long id, String username, String password, String email, Date lastPasswordReset,
Collection<? extends GrantedAuthority> authorities) {
this.setId(id);
this.setUsername(username);
this.setPassword(password);
this.setEmail(email);
this.setLastPasswordReset(lastPasswordReset);
this.setAuthorities(authorities);
this.setMyInfo(Information);
}
这对我来说最初是一个问题,因为设置信息的方法是基于登录的Principal进行的,这是不可能的,因为在登录过程的那个时候,正在创建Principal。