Spring

@preAuthorize() 로그인 페이지 매핑

Seung__Yong 2023. 4. 28. 01:30

@preAuthorize

메서드를 실행하기 전에 권한을 검사하는 기능을 지원하는 어노테이션으로 아래 익스프레션을들을 조합하여 사용할 수 있습니다.
  • hasRole([role]) : 현재 사용자의 권한이 파라미터의 권한과 동일한 경우 true
  • hasAnyRole([role1,role2]) : 현재 사용자의 권한디 파라미터의 권한 중 일치하는 것이 있는 경우 true
  • principal : 사용자를 증명하는 주요객체(User)를 직접 접근할 수 있다.
  • authentication : SecurityContext에 있는 authentication 객체에 접근 할 수 있다.
  • permitAll : 모든 접근 허용
  • denyAll : 모든 접근 비허용
  • isAnonymous() : 현재 사용자가 익명(비로그인)인 상태인 경우 true
  • isRememberMe() : 현재 사용자가 RememberMe 사용자라면 true
  • isAuthenticated() : 현재 사용자가 익명이 아니라면 (로그인 상태라면) true
  • isFullyAuthenticated() : 현재 사용자가 익명이거나 RememberMe 사용자가 아니라면 true

@preAuthorize()와 로그인 페이지 매핑

우선 결론부터 말하자면 

- 인증이 된 상태라면 자신에게 권한이 없는 페이지에 접근하면 403에러로 접근 불가능합니다.

- 그러나 인증이 되지 않은 상태에서 권한이 없는 페이지에 접근하면 로그인 페이지로 이동하게 됩니다.

 

추가로 로그인 페이지는 어떤 설정을 따르는지 테스트 해봤는데 Security에 설정해둔 loginPage()를 따르는 것을 확인했습니다.

- securityConfig의 가장 첫번째 로그인 페이지 정보(oauth2Login이 먼저 있으면 이를 인식)를 따릅니다.

 

                .oauth2Login(
                        oauth2Login -> oauth2Login
                                .loginPage("/usr/member/login1")
                )
                .formLogin(
                        formLogin -> formLogin
                                .loginPage("/usr/member/login2")
                )