kok202
Security 기초 (1)

2019. 7. 13. 04:32[정리] 기능별 개념 정리/Security + OAuth

강의 출처

강의 문서

 

* 강의 문서에서는 MVC를 @Controller 가 아닌 MvcConfig 로 구현했다.

* home.html, hello.html, login.html 은 생략한다.

* login.html 은 spring security 가 기본 로그인 login.html 을 제공한다.

* 하지만 이 페이지를 진짜 실무에서 쓰는 일은 없다.

 

home.html 에서 here 을 클릭 -> 로그인이 됬다 -> hello.html

home.html 에서 here 을 클릭 -> 로그인이 안됬다. -> login.html

 

 

 

 

 

@Configuration
public class MvcConfig implements WebMvcConfigurer {
    public void addViewControllers(ViewControllerRegistry registry) {
        registry.addViewController("/").setViewName("home");
        registry.addViewController("/home").setViewName("home");
        registry.addViewController("/hello").setViewName("hello");
        registry.addViewController("/login").setViewName("login");
    }
}
@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .authorizeRequests()
                .antMatchers("/", "/home").permitAll() // 이 경로는 허용한다
                .anyRequest().authenticated() // 나머지 요청은 인증이 필요하다.
                .and()
            .formLogin()
                .loginPage("/login").permitAll() // 이 경로는 로그인 폼이므로 허용한다.
                .and()
            .logout()
                .logoutSuccessUrl("/home")
                .permitAll();
    }

    @Bean
    @Override
    public UserDetailsService userDetailsService() {
        UserDetails user = User.withDefaultPasswordEncoder()
                .username("kok202")
                .password("123456")
                .roles("USER")
                .build();
        return new InMemoryUserDetailsManager(user);
    }
}

1. @EnableWebSecurity

이를 쓰는 순간 스프링에서 기본 제공하는 Security 설정을 사용자 정의 설정으로 대체한다

 

2. configure 메소드

기본적으로 사용자의 모든 요청을 Spring security 가 막는다. 심지어 home.html 에도 못들어간다. 따라서 "http://localhost:8080", "http://localhost:8080/home" 으로 들어오는 경로는 인증이 필요없다고 알려줄 필요가 있다. (* 참고로 css, js 와 같은 코드도 요청이 막히기 때문에 이에 대한 요청도 풀어줘야한다.)

 

3. userDetailsService 메소드

Spring security 가 관리하는 유저 관리 테이블. 회원 정보를 관리하는 테이블은 회사마다 다르다. user 일수도 있고 member 일수도 있고 account 일 수도 있다. 그 안에 들어가는 정보도 다르다. Spring security 에서 이러한 회사별 니즈를 충족하기 위해서 일반적으로 사용하는 설정들을 담고 추상화한 인터페이스가 UserDetailsService 이다. 개발자는 서버의 유저 관련 정보를 UserDetailsService 으로 변환하는 과정이 필요하다. 이 예제에서는 회원 테이블을 만들지 않는다. 깊이 다루지 않는다.

 

 

 

 

 

 


Flow

1. here 을 클릭한다.

2. localhost:8080/hello 로 가려한다.

3. anyRequest 에 걸리면서 인증이 필요하게된다.

4. Security contextAuthentication 이라는 객체가 있는지 확인한다.

5. Security contextAuthentication 이라는 객체가 없으면 인증이 안됬다는 뜻이다.

6. Filter bean 이 이 요청을 가로채서 사용자의 요청을 FormLogin 으로 보낸다.

7. FormLogin 은 /login 을 가리키므로 localhost:8080/login 으로 이동하게된다.

8. kok202, 123456 으로 로그인한다.

9. 유저 이름에 해당하는 유저 정보를 읽어온다.

10. 입력 받은 password 와 유저 정보의 password 가 일치하는지 판단한다.

11. 맞을 경우 Authentication 이라는 객체를 Security context 에 올려준다.

 

 

 

 

 

'[정리] 기능별 개념 정리 > Security + OAuth' 카테고리의 다른 글

OAuth 그림 요약  (0) 2019.08.23
스프링 시큐리티 주요 인터페이스  (0) 2019.08.03
스프링 시큐리티 개요  (0) 2019.08.03
Security 기초 (2)  (0) 2019.07.13
Security OAuth2 강의 정리  (0) 2019.07.13