권한 설정 및 표현식

인가 API - 권한 설정

 

  • 선언적 방식
    • URL
      • http.antMatchers("/users/**")/hasRole("USER")
    • Method
      • @PreAuthorize("hasRole("USER")") 
        public void user() {System.out.println("user")}
  • 동적 방식 - DB 연동 프로그래밍
    • URL
    • Method

선언적 방식 - URL

 

  • url 자체를 선언하여 접근 권한을 조정하는 방식
  • 설정 시 구체적인 경로가 먼저오고 그것 보다 큰범위의 경로가 뒤에 오도록 하여야 한다. 
  • 각 메소드에 대한  내용은 아래 같다. 
    • .authorizeRequests() : 모든 경로에 보 요청되는 메소드를 선언
    • .antMatchers("/","/users","user/login/**", "/login*").permitAll() : 해당 url에 접근시에는 권한없이 접근이 가능함.
    • .antMatchers("/mypage").hasRole("USER") : user권한이 있어야 접근이 가능함.
    • .antMatchers("/messages").hasRole("MANAGER") : manager 권한이 있어야 접근이 가능함.
    • .antMatchers("/config").hasRole("ADMIN") : admin 권한이 있어야 접근이 가능함.
    • .anyRequest().authenticated() : 나머지 요청들은 인증된 사용자만 접근이 가능토록함. 
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
                .authorizeRequests()
                .antMatchers("/","/users","user/login/**", "/login*").permitAll()
                .antMatchers("/mypage").hasRole("USER")
                .antMatchers("/messages").hasRole("MANAGER")
                .antMatchers("/config").hasRole("ADMIN")
                .anyRequest().authenticated()
    }

URL 표현식의 종류

 

메소드 동작
authenticated() 인증된 사용자의 접근을 허용
fullyAuthenticated() 인증된 사용자의 접근을 허용, rememberMe 인증 제외
(오로지 폼인증만으로 접근 가능함)
 permitAll() 무조건 접근을 허용
 denyAll() 무조건 접근을 허용하지 않음
 anonymous() 익명사용자의 접근을 허용
(반대로 권한이 있는 사람은 접근 불가함)
 rememberMe() 기억하기를 통해 인증된 사용자의 접근을 허용
 access(String) 주어진 SpEL 표현식의 평가 결과가 true이면 접근을 허용
 hasRole(String) 사용자가 주어진 역할이 있다면 접근을 허용  
 hasAuthority(String) 
사용자가 주어진 권한이 있다면 접근을 허용 
(hasRole과는 차이가 없음)
hasAnyRole(String...) 사용자가 주어진 권한이 있다면 접근을 허용
 hasAnyAuthority(String...)
사용자가 주어진 권한 중 어떤 것이라도 있다면 접근을 허용
hasIpAddress(String) 주어진 IP로부터 요청이 왔다면 접근을 허용

 

'Backend > Security' 카테고리의 다른 글

CSRF(사이트 간 요청 위조)  (0) 2023.01.09
ExceptionTranslationFilter  (0) 2023.01.09
SessionManagementFilter, ConcurrentSessionFilter  (0) 2023.01.03
동시 세션 제어  (0) 2023.01.03
AnonymousAuthenticationFilter  (0) 2023.01.03