STUDY/Spring

[Spring in action] chp 5. Securing Spring

디리릭 2022. 10. 23. 20:11
728x90

5. Spring 보안

Spring에서 보안에 관한 서비스를 제공하고 있다. 그 서비스를 설정 하기 위해서 pom 또는 gradle에 dependency를 추가하면 된다. 그게 끝이다. 그럼 설정이 완료된다. (SO EASY~)

<dependency>
 	<groupId>org.springframework.boot</groupId>
 	<artifactId>spring-boot-starter-security</artifactId>
</dependency>

pom 파일 같은 경우 위의 코드를 추가하면 된다. 

 

5-1 Spring 보안 자동 설정

위의 dependency를 추가하면 어떤 것이 추가 되는지 살펴보고자 한다. 

  • HTTP 인증
  • 간단한 로그인 페이지 생성 (단, username 은 'user' 이고 password는 어플리케이션 빌드시, 콘솔에 찍힌다)
  • 특정 role이나 인증이 요구되진 않는다. 

기본적인 로그인 페이지

5-2 사용자 정의 인증

기본적으로 제공되는 것은 단 하나의 user만 가능하고 직접 등록할 수 없다. 
이러한 불편함을 해소하기 위해서는 커스텀을 해야한다. 

user 정보를 저장하기 위해 UserDetailService를 생성한다. (controller, view 생성)

 

5-3 웹 보안 요청(web 레벨의 보안)

UserDetailService는 user를 등록하기 위한 서비스인데, 등록 페이지는 인증이 없이도 접근 가능하도록 하여야한다.
그래서 securityFilterChain을 통해 web level에서 보안 설정을 할 수 있다. 

@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
 return http
 .authorizeRequests()
 .antMatchers("/design", "/orders").hasRole("USER")
 .antMatchers("/", "/**").permitAll()
 .and()
 .build();
}

위의 코드를 살펴보면 design, orders 라는 path를 가진 페이지는 USER라는 role을 가진 사용자만이 접근 가능하다는 것이다. 

securityFilterChain에서는 CSRF(사이트 간 요청 위조) attack을 방어 하는 것(기본적으로 제공)을 끌 수도 있다.

책에서는 끌 이유가 거의 없으므로 끄지 말라고 한다. 

 

5-4 method 레벨의 보안

anotation으로 method 호출 가능 여부를 판단하도록 한다. 

  • PreAuthorize
  • PostAutherize

둘의 차이는 어느 시점에서 권한 여부를 체크하는 지이다. 

 

5-5 Know User

권한에 따라 제공 되는 서비스가 달라질 수 있으니 user에 관한 정보를 어떻게 알아낼 수 있는지 알아보자. 

controller 단에서는 Principal parameter, Authentication를 파라미터로 받아 확인 user의 정보를 확인 할 수 있다. 

또는 @AuthenticationPrincipal 이라는 anotation을 통해 알 수 있다. 

728x90

'STUDY > Spring' 카테고리의 다른 글

[Spring in action] chp 1. Getting started with Spring(1)  (0) 2022.10.11