java - 如何在Spring-Security中创建条件AuthenticationProvider?

标签 java spring spring-security

到目前为止,我将我的用户名和加密密码存储在数据库中。

我的自定义UserDetailsS​​ervice从数据库中查找用户。密码以加密方式存储,因此在此处应用 BCryptPasswordEncoder

public class SecurityConfiguration extends WebSecurityConfigurerAdapter {
    @Autowired
    private UserDetailsService userDetailsService;

    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.userDetailsService(userDetailsService).passwordEncoder(new BCryptPasswordEncoder());
    }
}

问题:我现在必须添加一个额外的身份验证源,它提供未加密的密码(我对此无法控制)。因此,如果在我的数据库中找不到经过身份验证的用户,我想使用未加密的密码检查其他源。但是我如何才能在这些情况下禁用 BCrypt 编码器呢?

最佳答案

您可以配置多个身份验证提供程序,如下所示。每个身份验证提供程序都会按顺序进行测试,首先成功的提供程序将提供经过身份验证的数据,其他的将被跳过。类似的用例以类似的方式实现,您必须首先通过数据库进行身份验证,然后 LDAP 服务器(反之亦然)也以类似的方式处理。

@Autowired
public void configure(AuthenticationManagerBuilder auth) throws Exception {
    auth.authenticationProvider(authenticationProviderWithEncryptedUser);
    auth.authenticationProvider(authenticationProviderWithNonEncryptedUser);

}

关于java - 如何在Spring-Security中创建条件AuthenticationProvider?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57270676/

相关文章:

spring - 使用 Angular2 将文件上传到 REST API

java - 如何从spring mvc安全配置生成权限矩阵?

java - Hibernate 映射 - 是否可以去掉一个 Java 类?

spring - 如何在 Spring-Web 中使用 RestTemplate 解析 gzip 编码的响应

Java抽象类泛型方法参数

java - 尝试使用 Spring WebFlow 填充下拉列表时出错?

grails - 使用Spring Security插件在Grails中创建自定义登录表单

Spring oauth2 InsufficientAuthenticationException

java - 无论显示器分辨率如何,如何将 JFrame 设置为居中显示?

Java Android 比较日期时遇到问题