[SPRING] 스프링 부트 PasswordEncoder 오류
SPRING스프링 부트 PasswordEncoder 오류
나는 작은 프로젝트를함으로써 Spring Boot를 사용하는 법을 배우고있다. 현재 나는 메인 클래스를 가지고있다 :
package com.recweb.springboot;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
/*@EnableAutoConfiguration(exclude={DataSourceAutoConfiguration.class})*/
public class SpringbootApplication {
public static void main(String[] args) {
SpringApplication.run(SpringbootApplication.class, args);
}
}
멤버 클래스 (id, firstname ..), MemberController 클래스 :
package com.recweb.springboot;
import java.util.Arrays;
import java.util.List;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class MemberController {
@GetMapping("/members")
public List<Member> getAllUsers(){
return Arrays.asList(new Member(1, "amit"));
}
}
및 WebSecurityConfig 클래스
package com.recweb.springboot;
import org.springframework.context.annotation.Bean;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.core.userdetails.User;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.provisioning.InMemoryUserDetailsManager;
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
@Bean
public UserDetailsService userDetailsService() {
InMemoryUserDetailsManager manager = new InMemoryUserDetailsManager();
manager.createUser(User.withUsername("user").password("user").roles("USER").build());
return manager;
}
}
"http : // localhost : 8080 / members"를 실행할 때 로그인 페이지가 나타나면 user & "user"를 암호로 입력 한 다음 하드 코드 된 구성원을 얻습니다. 그것은 괜찮 았지만, 그때 나는 오른쪽으로 클릭 한 내 프로젝트를 실행 - Maven 설치 (때문에 종속성을 추가, 난 그게 꼭 필요한지, 처음 Maven 함께 모르겠다). 그때부터 로그인 페이지에서 "user"& "user"를 입력하면이 오류가 발생합니다.
java.lang.IllegalArgumentException: There is no PasswordEncoder mapped for the id "null"
at org.springframework.security.crypto.password.DelegatingPasswordEncoder$UnmappedIdPasswordEncoder.matches(DelegatingPasswordEncoder.java:233) ~[spring-security-core-5.0.0.BUILD-SNAPSHOT.jar:5.0.0.BUILD-SNAPSHOT]
at org.springframework.security.crypto.password.DelegatingPasswordEncoder.matches(DelegatingPasswordEncoder.java:196) ~[spring-security-core-5.0.0.BUILD-SNAPSHOT.jar:5.0.0.BUILD-SNAPSHOT]
at org.springframework.security.authentication.dao.DaoAuthenticationProvider.additionalAuthenticationChecks(DaoAuthenticationProvider.java:86) ~[spring-security-core-5.0.0.BUILD-SNAPSHOT.jar:5.0.0.BUILD-SNAPSHOT]
at org.springframework.security.authentication.dao.AbstractUserDetailsAuthenticationProvider.authenticate(AbstractUserDetailsAuthenticationProvider.java:166) ~[spring-security-core-5.0.0.BUILD-SNAPSHOT.jar:5.0.0.BUILD-SNAPSHOT]
at org.springframework.security.authentication.ProviderManager.authenticate(ProviderManager.java:174) ~[spring-security-core-5.0.0.BUILD-SNAPSHOT.jar:5.0.0.BUILD-SNAPSHOT]
at org.springframework.security.authentication.ProviderManager.authenticate(ProviderManager.java:199) ~[spring-security-core-5.0.0.BUILD-SNAPSHOT.jar:5.0.0.BUILD-SNAPSHOT]
at org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter.attemptAuthentication(UsernamePasswordAuthenticationFilter.java:94) ~[spring-security-web-5.0.0.BUILD-SNAPSHOT.jar:5.0.0.BUILD-SNAPSHOT]
at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:212) ~[spring-security-web-5.0.0.BUILD-SNAPSHOT.jar:5.0.0.BUILD-SNAPSHOT]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) ~[spring-security-web-5.0.0.BUILD-SNAPSHOT.jar:5.0.0.BUILD-SNAPSHOT]
at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:116) ~[spring-security-web-5.0.0.BUILD-SNAPSHOT.jar:5.0.0.BUILD-SNAPSHOT]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) ~[spring-security-web-5.0.0.BUILD-SNAPSHOT.jar:5.0.0.BUILD-SNAPSHOT]
at org.springframework.security.web.csrf.CsrfFilter.doFilterInternal(CsrfFilter.java:124) ~[spring-security-web-5.0.0.BUILD-SNAPSHOT.jar:5.0.0.BUILD-SNAPSHOT]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) ~[spring-web-5.0.1.RELEASE.jar:5.0.1.RELEASE]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) ~[spring-security-web-5.0.0.BUILD-SNAPSHOT.jar:5.0.0.BUILD-SNAPSHOT]
at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:64) ~[spring-security-web-5.0.0.BUILD-SNAPSHOT.jar:5.0.0.BUILD-SNAPSHOT]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) ~[spring-web-5.0.1.RELEASE.jar:5.0.1.RELEASE]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) ~[spring-security-web-5.0.0.BUILD-SNAPSHOT.jar:5.0.0.BUILD-SNAPSHOT]
at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:105) ~[spring-security-web-5.0.0.BUILD-SNAPSHOT.jar:5.0.0.BUILD-SNAPSHOT]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) ~[spring-security-web-5.0.0.BUILD-SNAPSHOT.jar:5.0.0.BUILD-SNAPSHOT]
at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:56) ~[spring-security-web-5.0.0.BUILD-SNAPSHOT.jar:5.0.0.BUILD-SNAPSHOT]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) ~[spring-web-5.0.1.RELEASE.jar:5.0.1.RELEASE]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) ~[spring-security-web-5.0.0.BUILD-SNAPSHOT.jar:5.0.0.BUILD-SNAPSHOT]
at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:214) ~[spring-security-web-5.0.0.BUILD-SNAPSHOT.jar:5.0.0.BUILD-SNAPSHOT]
at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:177) ~[spring-security-web-5.0.0.BUILD-SNAPSHOT.jar:5.0.0.BUILD-SNAPSHOT]
at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:357) ~[spring-web-5.0.1.RELEASE.jar:5.0.1.RELEASE]
at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:270) ~[spring-web-5.0.1.RELEASE.jar:5.0.1.RELEASE]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-8.5.23.jar:8.5.23]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-8.5.23.jar:8.5.23]
at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:99) ~[spring-web-5.0.1.RELEASE.jar:5.0.1.RELEASE]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) ~[spring-web-5.0.1.RELEASE.jar:5.0.1.RELEASE]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-8.5.23.jar:8.5.23]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-8.5.23.jar:8.5.23]
at org.springframework.web.filter.HttpPutFormContentFilter.doFilterInternal(HttpPutFormContentFilter.java:108) ~[spring-web-5.0.1.RELEASE.jar:5.0.1.RELEASE]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) ~[spring-web-5.0.1.RELEASE.jar:5.0.1.RELEASE]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-8.5.23.jar:8.5.23]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-8.5.23.jar:8.5.23]
at org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:81) ~[spring-web-5.0.1.RELEASE.jar:5.0.1.RELEASE]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) ~[spring-web-5.0.1.RELEASE.jar:5.0.1.RELEASE]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-8.5.23.jar:8.5.23]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-8.5.23.jar:8.5.23]
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:200) ~[spring-web-5.0.1.RELEASE.jar:5.0.1.RELEASE]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) ~[spring-web-5.0.1.RELEASE.jar:5.0.1.RELEASE]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-8.5.23.jar:8.5.23]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-8.5.23.jar:8.5.23]
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:199) ~[tomcat-embed-core-8.5.23.jar:8.5.23]
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96) [tomcat-embed-core-8.5.23.jar:8.5.23]
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:478) [tomcat-embed-core-8.5.23.jar:8.5.23]
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140) [tomcat-embed-core-8.5.23.jar:8.5.23]
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:81) [tomcat-embed-core-8.5.23.jar:8.5.23]
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87) [tomcat-embed-core-8.5.23.jar:8.5.23]
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:342) [tomcat-embed-core-8.5.23.jar:8.5.23]
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:803) [tomcat-embed-core-8.5.23.jar:8.5.23]
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66) [tomcat-embed-core-8.5.23.jar:8.5.23]
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:868) [tomcat-embed-core-8.5.23.jar:8.5.23]
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1459) [tomcat-embed-core-8.5.23.jar:8.5.23]
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) [tomcat-embed-core-8.5.23.jar:8.5.23]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [na:1.8.0_131]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [na:1.8.0_131]
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) [tomcat-embed-core-8.5.23.jar:8.5.23]
at java.lang.Thread.run(Thread.java:748) [na:1.8.0_131]
로그인 페이지에 그대로 있습니다. 내가 의존성을 제거하려고 & Maven 다시 설치하지만, 행운을 빌어 요. 이것은 내 POM입니다.
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.recweb</groupId>
<artifactId>springboot</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>springboot</name>
<description>Demo project for Spring Boot</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.0.BUILD-SNAPSHOT</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-rest</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-test</artifactId>
<scope>test</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/org.hibernate/hibernate-validator -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>5.3.0.Final</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<!-- <scope>provided</scope> -->
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
<repositories>
<repository>
<id>spring-snapshots</id>
<name>Spring Snapshots</name>
<url>https://repo.spring.io/snapshot</url>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
<repository>
<id>spring-milestones</id>
<name>Spring Milestones</name>
<url>https://repo.spring.io/milestone</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>spring-snapshots</id>
<name>Spring Snapshots</name>
<url>https://repo.spring.io/snapshot</url>
<snapshots>
<enabled>true</enabled>
</snapshots>
</pluginRepository>
<pluginRepository>
<id>spring-milestones</id>
<name>Spring Milestones</name>
<url>https://repo.spring.io/milestone</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</pluginRepository>
</pluginRepositories>
</project>
무엇이 잘못 되었습니까? 감사
해결법
-
==============================
1.spring-security-core : 5.0.0.RC1에서 기본 PasswordEncoder는 DelegatingPasswordEncoder로 빌드됩니다. 사용자를 메모리에 저장하면 일반 텍스트로 암호를 제공하고 DelegatingPasswordEncoder에서 암호를 확인하려고 엔코더를 검색 할 때 암호를 저장하는 방법과 일치하는 암호를 찾을 수 없습니다.
spring-security-core : 5.0.0.RC1에서 기본 PasswordEncoder는 DelegatingPasswordEncoder로 빌드됩니다. 사용자를 메모리에 저장하면 일반 텍스트로 암호를 제공하고 DelegatingPasswordEncoder에서 암호를 확인하려고 엔코더를 검색 할 때 암호를 저장하는 방법과 일치하는 암호를 찾을 수 없습니다.
이 방법을 사용하여 대신 사용자를 만듭니다.
User.withDefaultPasswordEncoder().username("user").password("user").roles("USER").build();
DelegatingPasswordEncoder가 NoOpPasswordEncoder를 사용하여 이러한 비밀번호의 유효성을 검사 할 수 있도록 비밀번호에 {noop} 접두어를 붙이면됩니다. NoOpPasswordEncoder는 더 이상 사용되지 않습니다. 암호를 일반 텍스트로 저장하는 것은 좋지 않습니다.
User.withUsername("user").password("{noop}user").roles("USER").build();
자세한 내용은이 게시물을 확인하십시오.
https://spring.io/blog/2017/11/01/spring-security-5-0-0-rc1-released#password-encoding
-
==============================
2.inMemoryAuthentication에 NoOpPasswordEncoder를 적절히 사용하십시오.
inMemoryAuthentication에 NoOpPasswordEncoder를 적절히 사용하십시오.
auth .inMemoryAuthentication() .withUser("user").password("{noop}password").roles("USER")
-
==============================
3.이것을 사용할 수는 있지만 User.withDefaultPasswordEncoder ()가 더 이상 사용되지 않습니다.
이것을 사용할 수는 있지만 User.withDefaultPasswordEncoder ()가 더 이상 사용되지 않습니다.
@Bean @Override public UserDetailsService userDetailsService() { PasswordEncoder encoder = PasswordEncoderFactories.createDelegatingPasswordEncoder(); final User.UserBuilder userBuilder = User.builder().passwordEncoder(encoder::encode); UserDetails user = userBuilder .username("user") .password("password") .roles("USER") .build(); UserDetails admin = userBuilder .username("admin") .password("password") .roles("USER","ADMIN") .build(); return new InMemoryUserDetailsManager(user, admin); }
-
==============================
4.
@Override public void configure(AuthenticationManagerBuilder auth) throws Exception{ auth.inMemoryAuthentication().passwordEncoder(NoOpPasswordEncoder.getInstance()) .withUser("test").password("test123").roles("USER").and() .withUser("test1").password("test123").roles("ADMIN"); }
-
==============================
5.나는 단순히 덧붙였다.
나는 단순히 덧붙였다.
@Bean public static NoOpPasswordEncoder passwordEncoder() { return (NoOpPasswordEncoder) NoOpPasswordEncoder.getInstance(); }
구성 클래스에
-
==============================
6.일종의 암호 엔코더가 필요하지만
일종의 암호 엔코더가 필요하지만
withDefaultPasswordEncoder()
더 이상 사용되지 않으며 제작에 적합하지 않습니다. 이것을 대신 사용하십시오 :
PasswordEncoder encoder = PasswordEncoderFactories.createDelegatingPasswordEncoder(); ... UserDetails user = User.withUsername("someusername") .password(encoder.encode("somepassword")) .roles("USER").build();
참고 : https://docs.spring.io/spring-security/site/docs/5.0.2.BUILD-SNAPSHOT/api/index.html?org/springframework/security/core/userdetails/User.html
-
==============================
7.다음 중 하나를 사용하면 잘 작동합니다.
다음 중 하나를 사용하면 잘 작동합니다.
@Autowired public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception { auth.inMemoryAuthentication().withUser("admin").password("{noop}admin@123").roles("admin"); }
또는
@Override protected void configure(AuthenticationManagerBuilder auth) throws Exception { auth.inMemoryAuthentication().withUser("admin").password("{noop}admin").roles("admin"); }
또는
@Override protected void configure(AuthenticationManagerBuilder auth) throws Exception { auth.inMemoryAuthentication().passwordEncoder(NoOpPasswordEncoder.getInstance()).withUser("admin").password("{noop}admin").roles("admin"); }
감사!
-
==============================
8.다음과 같이 비밀번호 인코더를 설정해야합니다.
다음과 같이 비밀번호 인코더를 설정해야합니다.
@Bean public PasswordEncoder passwordEncoder() { return PasswordEncoderFactories.createDelegatingPasswordEncoder(); }
SpringEncoder를 사용하려면 사용자와 Spring Boot 2의 클라이언트에 passwordEncoder를 사용해야합니다.
이 저장소를 확인하십시오. https://github.com/dzinot/spring-boot-2-oauth2-authorization-jwt
passwordEncoder가 설정되는 방법과 데이터베이스의 사용자 및 클라이언트에서이를 사용하는 방법을 볼 수 있습니다.
-
==============================
9.Spring Security 5의 기본 인코더를 유지하기 위해 {noop}로 모든 기존 비밀번호를 접두사로 묶으십시오.
Spring Security 5의 기본 인코더를 유지하기 위해 {noop}로 모든 기존 비밀번호를 접두사로 묶으십시오.
예:
auth.inMemoryAuthentication() .withUser("admin").password("{noop}admin!234").roles("ADMIN");
-
==============================
10.봄 보안 5.0의 새로운 기능에 따르면. 그들은 이것을 씁니다.
봄 보안 5.0의 새로운 기능에 따르면. 그들은 이것을 씁니다.
그래서 나는이 Multiple HttpSecurity를 시도했다. 이것은 내 보안 구성입니다. 희망이 당신을 도울 것입니다.
@Configuration @EnableWebSecurity public class SecurityConfig { private final EdminService edminService; public SecurityConfig ( final EdminService edminService ){ this.edminService=edminService; } @Bean public UserDetailsService userDetailsService() throw Exception { UserBuilder users= Users.withDefaultPasswordEncoder; InMemoryUserDetailsManager manager = new InMemoryUserDetailsManager(); List<EdminEntity> edminList=this.edminService.findAll(); for(EdminEntity edmin: edminList){ manager.createUser(users.username(edmin.getEdminname()) .password(edmin.getEdminrpass()).roles("EDMIN_ROLE").build()); } return manager; } @Configuration @Order(1) public static class ApiWebSecurityConfigurationAdapter extends WebSecurityConfigurerAdapter { protected void configure(HttpSecurity http) throws Exception { http .authorizeRequests() .antMatchers("/home","/vendor/**","/image/**","/home/**").permitAll() .antMatchers("/admin/**").hasRole("EDMIN_ROLE") .anyRequest().authenticated() .and() .formLogin() .loginPage("/login") .permitAll() .defaultSuccessUrl("/home") .and() .logout() .logoutRequestMatcher(new AntPathRequestMatcher("/logout"));} } }
미안 나의 영어와 나의 대답을 읽어 주셔서 고마워.
-
==============================
11.
A few days ago I have to face the same problem on spring security version (5.0.8). See the example version here: code: @Override protected void configure(AuthenticationManagerBuilder auth) throws Exception { auth .inMemoryAuthentication() .passwordEncoder(NoOpPasswordEncoder.getInstance()) .withUser("farid").password("farid").roles("USER") .and() .withUser("admin").password("admin").roles("ADMIN"); } OR When you are configuring the ClientDetailsServiceConfigurer, you have to also apply the new password storag`enter code here`e format to the client secret. .secret("{noop}secret")
당신은 링크를 볼 수 있습니다 : 여기에 링크 설명을 입력하십시오
-
==============================
12.암호 인코더를 설정하고 다음 샘플을 확인해야합니다.
암호 인코더를 설정하고 다음 샘플을 확인해야합니다.
PasswordEncoder encoder = PasswordEncoderFactories.createDelegatingPasswordEncoder(); auth.inMemoryAuthentication().passwordEncoder(encoder).withUser("Ahmad") .password("1600").roles("USER", "ADMIN").and().withUser("Belal").password("1515").roles("USER");
-
==============================
13.SecurityConfig extends WebSecurityConfigurerAdapter에서 다음을 시도하십시오.
SecurityConfig extends WebSecurityConfigurerAdapter에서 다음을 시도하십시오.
@Bean public PasswordEncoder passwordEncoder() { return new BCryptPasswordEncoder(); } @Override protected void configure(final AuthenticationManagerBuilder auth) throws Exception{ auth .inMemoryAuthentication() .withUser("user") .password(passwordEncoder().encode("password")) .roles("USER") .and() .withUser("admin") .password(passwordEncoder().encode("admin")) .roles("USER", "ADMIN"); }
나를 위해 일해
-
==============================
14.IllegalArgumentException이 있음 : 초기 응용 프로그램 시작 하우스 키퍼를로드하는 중에 "null"예외로 매핑 된 PasswordEncoder가 없습니다. (응용 프로그램을 시작하기 전에 DB에서 데이터를 정규화하기 만하면됩니다.)이 (수동으로 인증 된 사용자 설정) 접근 방식을 사용하면 UsernamePasswordAuthenticationToken 및 setAuthentication을 만들 수 있습니다. AuthorityList 3 번째 인수를 지정하지 않으면 IllegalArgumentException을 얻을 수 있습니다.
IllegalArgumentException이 있음 : 초기 응용 프로그램 시작 하우스 키퍼를로드하는 중에 "null"예외로 매핑 된 PasswordEncoder가 없습니다. (응용 프로그램을 시작하기 전에 DB에서 데이터를 정규화하기 만하면됩니다.)이 (수동으로 인증 된 사용자 설정) 접근 방식을 사용하면 UsernamePasswordAuthenticationToken 및 setAuthentication을 만들 수 있습니다. AuthorityList 3 번째 인수를 지정하지 않으면 IllegalArgumentException을 얻을 수 있습니다.
UsernamePasswordAuthenticationToken authReq = new UsernamePasswordAuthenticationToken( admin.getEmail(), UserServiceImpl.PASSWORD_ENCODER.encode(admin.getPassword()), AuthorityUtils.createAuthorityList(admin.getRoles()) // <= had to add this line to resolve the exception ); SecurityContextHolder.getContext().setAuthentication(authReq);
어쩌면 다른 설정 단계도 가능하지만 AuthorityList를 설정하는 것이 나에게 충분하다. 그리고이 페이지에서 해결책을 찾지 못하면이 방향으로 파고들 수 있습니다.
from https://stackoverflow.com/questions/46999940/spring-boot-passwordencoder-error by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] jackson에 의해 직렬화 된 모든 객체에 클래스 이름 포함 (0) | 2019.01.06 |
---|---|
[SPRING] SpringPersistenceUnitInfo :: AbstractMethodError (0) | 2019.01.06 |
[SPRING] 스프링 보안은 "? 매개 변수"형식과 일치 할 수 없습니까? (0) | 2019.01.06 |
[SPRING] Java 8 LocalDate MappingException을 사용하는 Spring 데이터 MongoDB (0) | 2019.01.06 |
[SPRING] Spring에서 정적 메서드를 가로 채기하는 방법? (0) | 2019.01.06 |