본문 바로가기
개발/Spring

[Spring Security] 요청 권한 설정 / HttpMethod, url 패턴으로 접근 권한 관리

by Allonsy 2022. 1. 21.
반응형

WebSecurityConfigurerAdapter 상속 & configure 오버라이드

# 권한 체크할 패턴 적용 방법 - antMatchers()

1. HttpMethod 로 권한 체크

antMatchers(HttpMethod.POST)

2. HttpMethod + url 패턴(문자열 가변인수)으로 권한 체크

antMatchers(HttpMethod.GET, "/api/products/**", "/api/abc/**")

3. url 패턴(문자열 가변인수)으로 권한 체크

antMatchers("/api/products/**", "/api/abc/**")

# 권한 체크 방법 - antMatchers 뒤에 호출

1. hasRole(String role)

- USER, ADMIN 등 지정한 역할 허용(앞에 ROLE_ 붙지 않음)

 

2. hasAnyRole(String... roles)

- USER,ADMIN 등 지정한 역할이 하나라도 있으면 허용

 

3. hasAuthority(String authority)

- ROLE_USER, ROLE_ADMIN 등 지정한 권한 허용

 

4. hasAnyAuthority(String... authorities)

- ROLE_USER, ROLE_ADMIN 등 지정한 권한이 하나라도 있으면 허용 

 

5. hasIpAddress(String ipaddressExpression)

- 지정한 ip 주소 허용

 

6. permitAll()

- 전부 허용

 

7. anonymous()

- 익명 사용자 허용

 

8. rememberMe()

- rememberMe 인증 사용자 허용

 

9. denyAll()

- 모두 허용 안함

 

10. authenticated()

- 인증된 사용자 허용

 

11. fullyAuthenticated()

- 인증된 사용자 허용, rememberMe 인증 제외

 

# requestMatchers 순서

세분화 된 요청 패턴을 먼저 적용, 더 넓은 범위의 패턴이 위에 있으면 위에서 먼저 걸러진다

  @Override
  protected void configure(HttpSecurity http) throws Exception {
    http
      .csrf()
        .disable() // api csrf 사용안함
      .headers()
       .disable()
      .exceptionHandling()
        .accessDeniedHandler(accessDeniedHandler)
        .authenticationEntryPoint(unauthorizedHandler)
        .and()
      .sessionManagement()
        .sessionCreationPolicy(SessionCreationPolicy.STATELESS) // JWT 인증, 세션 사용 안 함
        .and()
      .authorizeRequests() // 다음 리퀘스트 권한 체크
        .antMatchers("/api/users/login").permitAll() // 모든 접근 가능
        .antMatchers("/api/products/**").permitAll()
        .antMatchers("/api/**").hasRole(Role.USER.name()) // ROLE 역할 체크
        .anyRequest().authenticated() // 나머지 요청 모두 인증된 회원만 접근 가능
        .and()
      .formLogin()
       .disable();
    http
      .addFilterBefore(jwtAuthenticationTokenFilter(), UsernamePasswordAuthenticationFilter.class);
  }

 

반응형

댓글