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을 통해 알 수 있다.
'STUDY > Spring' 카테고리의 다른 글
[Spring in action] chp 1. Getting started with Spring(1) (0) | 2022.10.11 |
---|