【问题标题】:Reactive Spring 5 Security with custom user service non-blocking具有自定义用户服务非阻塞的反应式 Spring 5 安全性
【发布时间】:2018-04-18 22:45:37
【问题描述】:

我有以下 Spring 5 安全配置:

@Configuration
@EnableWebFluxSecurity
class SecurityConfiguration(private val us: UserService) : UserDetailsRepository {

    override fun findByUsername(username: String?): Mono<UserDetails> {
        if (username != null) {
            val user = us.byUsername(username).block()
            val grantedAuthorities = user.roles!!
                    .map{SimpleGrantedAuthority(it)}

            var userDetails: UserDetails = org.springframework.security.core.userdetails.User(user.username,
                    user.password, user.enabled, user.accountNonExpired, user.credentialsNonExpired,user.accountNonLocked,
                    grantedAuthorities)

            return userDetails.toMono()
        }
        throw UsernameNotFoundException("Username is null")
    }
}

我正在使用自定义用户服务,并将此 User 映射到 Spring Security UserDetails 对象。要获取User 对象,我需要使用block() 语句。有没有办法让这段代码不阻塞?

【问题讨论】:

    标签: spring spring-security


    【解决方案1】:

    这是一个java实现

    @Override
    public Mono<UserDetails> findByUsername(String username) {
        return userRepository.findByUsername(username).map(new Function<User, UserDetails>() {
            @Override
            public UserDetails apply(User user) {
                List<GrantedAuthority> authorities = new ArrayList<>();
                authorities.add(new SimpleGrantedAuthority("ROLE_ADMIN"));
                return new org.springframework.security.core.userdetails.User(user.getUsername(), user.getPassword(),
                        true, true, true, true, authorities);
            }
        });
    }
    

    【讨论】:

      猜你喜欢
      • 2020-07-26
      • 2021-07-26
      • 2014-12-31
      • 2019-10-26
      • 2018-11-12
      • 2016-11-10
      • 2021-01-17
      • 2018-01-28
      • 2016-01-18
      相关资源
      最近更新 更多