서비스들의 대부분은 인증이 필요하다.
요청자가 누구인지 구분해야 하기 때문이다.
이때 사용되는 어노테이션이 @PreAuthorize와 @AuthenticationPrincipal이다.
서비스들의 대부분은 인증이 필요하다.
요청자가 누구인지 구분해야 하기 때문이다.
이때 사용되는 어노테이션이 @PreAuthorize와 @AuthenticationPrincipal이다.
@PreAuthorize 어노테이션은 인증되지 않은 요청에 대해 로그인 요청으로 리다이렉션한다.
매개변수로 "true"나 "false"를 받으며, 둘 다 아니라면 에러가 발생한다.
SecurityConfig 클래스에 @EnableMethodSecurity(prePostEnabled = true) 설정이 추가되어야 기능할 수 있다.
클래스에 적용 가능해서 사용자 역할(role) 기반으로 메서드를 작성할 때 유용하다.
@Configuration
@EnableWebSecurity
@EnableMethodSecurity(prePostEnabled = true)
public class SecurityConfig {
/* 생략 */
}
@PreAuthorize("isAuthenticated()")
@GetMapping("/create")
public String questionCreate(QuestionForm questionForm) {
/* 생략 */
}
@AuthenticationPrincipal은 주로 사용되는 인증 관련 어노테이션이다.
인증 객체를 가져올 수 있으며, 기존의 Principal을 통한 접근보다 더 많은 정보를 가져올 수 있다.
커스텀이 가능해서 유용하고 코드가 간결해진다.
현재는 @CustomUser라는 어노테이션을 만들어서 인증 엔티티를 그대로 가져와서 사용 중이다.