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")
)