如何在成功验证后拒绝Spring中的访问

时间:2018-02-27 12:49:47

标签: spring authentication spring-boot authorization

我在Spring中实现了一些REST服务,并且在某些情况下需要拒绝成功登录用户。

我已经实现了 UserDetailsS​​ervice 并编写了 loadUserByUsername(String username)方法,但是,当用户获得正确的身份验证时,我需要进行另一次验证,如果它失败了,拒绝访问。

为此,我实现了一个侦听器来检测正确的身份验证:

@Component 公共类LoginSuccessListener实现ApplicationListener {     @Autowired     LicenseControlService licenseControlService;

@Override
public void onApplicationEvent(InteractiveAuthenticationSuccessEvent  e){
    User user = (User)e.getAuthentication().getPrincipal();
    //Here I want to reject the access because of whatever logic 
}    

我需要确保在用户获得正确授权时应用可能拒绝访问的逻辑,这就是我收到此事件时需要放置逻辑的原因。 有没有办法做到这一点?

1 个答案:

答案 0 :(得分:0)

我发布了我采用的解决方案,以防有人需要相同的行为:

我所做的是,在实现UserDetailsS​​ervice的类中,在返回User类时,在enabled属性中使用false实例化它...将401返回给请求者。

我还实现了一个CustomAuthenticationEntryPoint,它扩展了BasicAuthenticationEntryPoint,并使用了重写方法。 Spring每次返回一个身份验证错误时都会调用该方法,因此,在此方法中,我可以查询AuthenticationException的类型,并根据它来决定和修改返回的状态。