Spring Securityユーザーの追加


複数のユーザーを追加するには:

앞서 우리는 한명의 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로는 접근할 수 없고 우리가 설정해준 사용자를 통해서만 접속할 수 있다.