전공영역 공부 기록

스프링시큐리티 4편 인메모리 사용자 생성

악분 2021. 10. 30. 12:32
반응형

 

안녕하세요. 4편에서는 스프링시큐리티 인메모리 사용자에 대해 살펴보고자 합니다. 인메모리 사용자는 https://malwareanalysis.tistory.com/157글에도 소개했었습니다. 이 글에서는 websecurityconfig를 이용해서 인메모리 사용자를 만들었습니다. 반면 4편에서는 UserDetailsService를 사용해서 인메모리 사용자를 생성합니다.

 

영상: https://youtu.be/zbuWEH_9aCY

git 링크: https://github.com/choisungwook/springsecurity-youtube/blob/chatper_4_inmemory/springsecurity_app/src/main/java/com/demo/springseucurity/SpringseucurityApplication.java 

 

1. Bean 등록

인메모리는 InMemoryUserDetailsManager가 관리합니다. InMemoryUserDetailsManager를 관리하기 위해서는 메소드를 Bean으로 등록해야 합니다. 그리고 리턴타입이 UserDetailsService이어야 합니다.

@SpringBootApplication
public class SpringseucurityApplication {

	public static void main(String[] args) {
		SpringApplication.run(SpringseucurityApplication.class, args);
	}

	@Bean
	public UserDetailsService users() {
		...

		return new InMemoryUserDetailsManager(user, admin);
	}

}

 

2. 인메모리 사용자 생성

스프링시큐리티가 관리하는 User 클래스를 사용해서 인메모리 사용자를 등록할 수 있습니다. User 클래스의 리턴 타입은 UserDetails입니다.

 

User클래스는 빌더를 제공합니다. 사용자와 비밀번호를 입력은 필수입니다. 이 때, 주의사항은 비밀번호는 암호화하지 않으면 null로 저장됩니다. 그러므로, 암호화한 값을 입력해야 합니다. 암호화하지 않고 평문으로 비밀번호를 저장하는 방법은 {noop}특수 키워드를 사용하시면 됩니다.

@SpringBootApplication
public class SpringseucurityApplication {

	public static void main(String[] args) {
		SpringApplication.run(SpringseucurityApplication.class, args);
	}

	@Bean
	public UserDetailsService users() {
		UserDetails user = User.builder()
				.username("user")
				.password("{noop}password")
				.roles("USER")
				.build();

		UserDetails admin = User.builder()
				.username("admin")
				.password("{noop}password")
				.roles("USER", "ADMIN")
				.build();

		return new InMemoryUserDetailsManager(user, admin);
	}

}

 

반응형