相关疑难解决方法(0)

Spring Security 5:没有为id"null"映射PasswordEncoder

我正在从Spring Boot 1.4.9迁移到Spring Boot 2.0以及Spring Security 5,我正在尝试通过OAuth 2进行身份验证.但是我收到此错误:

java.lang.IllegalArgumentException:没有为id"null"映射PasswordEncoder

从Spring Security 5的文档中,我了解到密码的存储格式已更改.

在我当前的代码中,我创建了我的密码编码器bean:

@Bean
public BCryptPasswordEncoder passwordEncoder() {
    return new BCryptPasswordEncoder();
}
Run Code Online (Sandbox Code Playgroud)

但它给了我以下错误:

编码密码看起来不像BCrypt

所以我按照Spring Security 5文档更新编码器:

@Bean
public PasswordEncoder passwordEncoder() {
    return PasswordEncoderFactories.createDelegatingPasswordEncoder();
}
Run Code Online (Sandbox Code Playgroud)

现在如果我可以在数据库中看到密码,那么它就是存储的

{bcrypt}$2a$10$LoV/3z36G86x6Gn101aekuz3q9d7yfBp3jFn7dzNN/AL5630FyUQ
Run Code Online (Sandbox Code Playgroud)

随着第一个错误消失,现在当我尝试进行身份验证时,我收到以下错误:

java.lang.IllegalArgumentException:没有为id"null"映射PasswordEncoder

为了解决这个问题,我尝试了Stackoverflow的以下所有问题:

这是一个类似于我的问题,但没有回答:

注意:我已将加密密码存储在数据库中,因此无需再次编码UserDetailsService.

在Spring security 5文档中,他们建议您可以使用以下方法处理此异常:

DelegatingPasswordEncoder.setDefaultPasswordEncoderForMatches(的PasswordEncoder)

如果这是修复,那么我应该把它放在哪里?我试过把它放在PasswordEncoder像下面这样的bean中,但它没有用:

DelegatingPasswordEncoder def = new DelegatingPasswordEncoder(idForEncode, encoders);
def.setDefaultPasswordEncoderForMatches(passwordEncoder);
Run Code Online (Sandbox Code Playgroud)

MyWebSecurity类

@Configuration
@EnableWebSecurity
public class SecurityConfiguration …
Run Code Online (Sandbox Code Playgroud)

java spring spring-security spring-boot spring-security-oauth2

37
推荐指数
6
解决办法
4万
查看次数

迁移到Spring Boot 2 - 安全编码密码看起来不像BCrypt

我有一个Spring Boot 1.5.9授权服务器,它使用BCrypt进行密码存储.我正在尝试迁移到2.0但是,我不再能够检索令牌以进行授权.

服务器的响应是:

    "timestamp": "2018-03-09T15:22:06.576+0000",
    "status": 401,
    "error": "Unauthorized",
    "message": "Unauthorized",
    "path": "/oauth/token"
}
Run Code Online (Sandbox Code Playgroud)

控制台输出以下内容:2018-03-09 09:22:06.553 WARN 20976 --- [nio-8090-exec-1] o.s.s.c.bcrypt.BCryptPasswordEncoder : Encoded password does not look like BCrypt.

这部分应用程序之前工作正常.我做的唯一更改是build.gradle文件(更改springBootVersion,添加io.spring.dependency-management插件和添加runtime('org.springframework.boot:spring-boot-devtools').

buildscript {
    ext {
        springBootVersion = '2.0.0.RELEASE'
    }
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
    }
}

apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'org.springframework.boot'
apply plugin: 'io.spring.dependency-management'

group = 'com.midamcorp'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = 1.8

repositories {
    mavenCentral() …
Run Code Online (Sandbox Code Playgroud)

java spring spring-security spring-boot

10
推荐指数
1
解决办法
5815
查看次数