我可以在哪个位置向userDetails添加自定义信息?

时间:2016-07-12 15:32:41

标签: spring-security spring-boot

我想在我的自定义" 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);

在身份验证/授权过程中添加此类信息的最佳点是什么,以及我最好如何做到这一点?

1 个答案:

答案 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。