[Spring] Principal 객체

이다혜·2023년 11월 18일
0

Spring

목록 보기
13/27

Principal 객체란?

스프링 시큐리티에서 현재 인증된 사용자를 나타내는 객체이다.

💡 principal.getName()을 호출하면 현재 로그인한 사용자의 사용자명(ID)를 알 수 있다.

하지만 Principle 객체는 로그인을 해야만 생성되는 객체이기 때문에 로그인하지 않은 상태에서 사용하면 null값이 들어가서 오류가 발생한다.

이 문제를 해결하려면 principal 객체를 사용하는 메서드에 어노테이션을 추가해야한다.

@PreAuthorize("isAuthenticated()")

이 어노테이션이 붙은 메서드는 로그인이 필요한 메서드임을 의미한다.
만약 로그아웃 상태에서 호출되면 로그인 페이지로 이동된다.

	@PreAuthorize("isAuthenticated()")
    @PostMapping("/create")
    public String questionCreate(@Valid QuestionForm questionForm, BindingResult bindingResult, Principal principal) {
        SiteUser siteUser = userService.getUser(principal.getName());

        if(bindingResult.hasErrors()) {
            return "question_form";
        }
        questionService.create(questionForm.getSubject(), questionForm.getContent(), siteUser);
        return "redirect:/question/list";
    }

@EnableMethodSecurity(prePostEnabled = true)

@PreAuthorize 애너테이션을 사용하기 위해 SecurityConfig에 반드시 필요하다.

@Configuration
@EnableWebSecurity
@EnableMethodSecurity(prePostEnabled = true)
public class SecurityConfig {
	...
}

0개의 댓글