Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 用户状态的自定义实现_Java_Spring_Spring Security - Fatal编程技术网

Java 用户状态的自定义实现

Java 用户状态的自定义实现,java,spring,spring-security,Java,Spring,Spring Security,我正在尝试实现一个自定义的安全实现,它使用一个额外的字段(枚举,该字段说明用户的当前状态,例如,预注册、活动、禁用、密码更改等) 我想检查这个用户的状态,抛出一个自定义异常并发送一个不同的HttpStatus(不是403)。我已将控件添加到UserDetailsService,并添加了以下行: @Service public class UserDetailsServiceImpl implements UserDetailsService { private UserReposito

我正在尝试实现一个自定义的安全实现,它使用一个额外的字段(枚举,该字段说明用户的当前状态,例如,预注册、活动、禁用、密码更改等)

我想检查这个用户的状态,抛出一个自定义异常并发送一个不同的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
异常。

你说你不能抛出自己的异常是什么意思?你对此有什么问题?你可以抛出任何你想要的
RuntimeException
,实际上我想要的是发送一个新的HttpStatus作为对请求的响应。我只是尝试添加一个新的AuthenticationException类型并尝试捕获它,但它不允许我这样做,因为我正在实现一个接口。抛出一个运行时只是一种解决方法,必须有一种方法在spring框架中实现这一点。想知道怎么做。
@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());
    }

}