用户状态的自定义实现

时间:2018-07-21 12:52:37

标签: java spring spring-security

我正在尝试使用一个额外的字段(枚举说明用户的当前状态,例如PREREGISTRATION,ACTIVE,DISABLED,PASSWORD_CHANGED等)来实现自定义安全性实现

public enum UserStatus {
    PRE_REGISTRATION,
    ACTIVE,
    DISABLED,
    PASSWORD_RESET_REQUESTED,
    PASSWORD_MUST_BE_RESETTED;
} 

我想检查该用户的状态并引发自定义异常,然后发送其他HttpStatus(非403)。我已将控件添加到UserDetailsService并添加了以下行:

@Service
public class UserDetailsServiceImpl implements UserDetailsService {

    private UserRepository userRepository;

    public UserDetailsServiceImpl(UserRepository userRepository){
        this.userRepository = userRepository;
    }

    @Override
    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException{
        ApplicationUser user = userRepository.findByUsername(username);
        if(user == null) throw new UsernameNotFoundException(username);
        if(user.getUserStatus()==UserStatus.PRE_REGISTRATION) throw new UserRegistrationNotCompleted(username);
        return new org.springframework.security.core.userdetails.User(user.getUsername(),user.getPassword(),Collections.emptyList());
    }

}

但是,即使我在自定义异常中扩展了UserDetailsService,我也无法在这里抛出自己的异常,因为我已经实现了AuthenticationException

我不想使用UsernameNotFoundException并将自定义消息发送给客户端。我想在此处发送一个单独的HttpStatus异常。

0 个答案:

没有答案