我正在尝试使用一个额外的字段(枚举说明用户的当前状态,例如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
异常。