Spring Security 여러명의 사용자 추가하기

12436 단어 SpringSpring

여러명의 사용자 추가하는 방법

앞서 우리는 한명의 user만이 해당 어플리케이션을 이용할 수 있었다. 해당 어플리케이션을 사용하고자
하는 사람이 한명의 user id와 password를 알지 못하면 해당 어플리케이션을 접속할 수 없었다. 따라서
이번시간에는 여러명의 유저를 추가하는 방법에 대해서 알아보고자 한다.

protected void configure; 같은 함수지만 다른 DI

앞서 인증에 대한 함수의 기본 골격에 대해서 살펴보았다. 여러명의 사용자를 추가하기 위해선 우리는 
다른 객체를 DI하고 있는 configure 함수를 추가해서 오버라이딩해야한다.

@Configuration
public class ProjectSecurityConfig extends WebSecurityConfigurerAdapter {
	
    @Override
	protected void configure(HttpSecurity http) throws Exception {
	http.authorizeReuqests().anyRequest()
   	.authenticated().and().forLogin()
    	.and().httpBasic();
        
    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.inMemoryAuthentication().withUser("admin").password("a").authorities("admin")
        .and().withUser("user").password("u").authorities("read")
        .and().passwordEncoder(NoOpPasswordEncoder.getInstance());
    }        
}

해당 configure 함수는 AuthenticationManagerBuilder를 객체로 받고 있다. 해당 객체에는 
inMemoryAuthenticatioin() 함수가 있는데 해당 함수는 추가되는 user를 Spring Container
에 저장하는 역할을 담당한다.

또 보면은 withUser().password().authorities() 함수를 통해 사용자, 패스워드, 권한을 추
가해 줄 수 있고 and()를 통해 또다른 사용자를 추가해 줄 수 있다.

그리고 기본적으로 추가하고 싶은 user를 다 추가한 후 passwordEncoder() 함수를 통해 마무리
지어주어야한다. Encoder 방식의 설정을 해주지 않을 경우 Spring Security가 에러를 발생시킨
다. 현재는 Encoder 설정을 해주지 않았고 차후에 Encoder 설정을 하기로 하자.

위의 configure 함수에 대해 좀더 직관적인 코드로 이해하기

    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        InMemoryUserDetailsManager userDetailsService = new InMemoryUserDetailsManager();
        UserDetails user = User.withUsername("admin").password("a").authorities("admin").build();
        UserDetails user1 = User.withUsername("user").password("u").authorities("read").build();
        userDetailsService.createUser(user);
        userDetailsService.createUser(user1);
        auth.userDetailsService(userDetailsService);
    }

    @Bean
    public PasswordEncoder passwordEncoder() {
        return NoOpPasswordEncoder.getInstance();
    }
위 코드는 위에서 살펴본 protected void configure(AuthenticationManagerBuilder auth)와 같은 로
직의 코드이지만 조금더 직관적으로 이해하기 위해 넣게되었다.

해당 코드를 살펴보면 알수 있듯이 userDetailsService를 이용해 createUser() 메소드를 통하여 생성한 
User에 대해 추가해 주었고. 그 userDetailsService를 auth 객체에 있는 method의 매개변수에 넣어줌
으로써 Spring Security를 구성해주었다.

그리고 인코더 부문과 관련해선 Bean 객체로 등록해주었다.

inMemoryAuthentication() 과 InMemoryUserDetailsManager()의 차이

두 메서드 사용자를 추가하는 기능이 있다. 후자(InMemoryUserDetailsManage())의 경우 user를 삭제하
고 업데이트할 수 있는 함수가 있는 반먼 전자(inMemoryAuthentication())의 경우 사용자를 생성하는 메
서드만 사용할 수 있는 차이점이 있다.

간편하게 사용자를 추가하는 코드를 작성하고자 할 때 전자를 쓰고 그렇지 않고 삭제 및 수정을 할 필요성
이 있을 경우 후자를 사용하면 될 것 같다.

그래서 접속은?

위와 같이 admin 권한을 가진 사용자와 user 권한을 가진 사용자를 추가해주었다. 그랬을 때 application
.properties에 설정한 user로는 접근할 수 없고 우리가 설정해준 사용자를 통해서만 접속할 수 있다.

좋은 웹페이지 즐겨찾기