본문 바로가기
개발 일기/spring

Spring Security 설정 (기본)

by URMOO 2022. 8. 31.
반응형

시큐리티 설정은 맨날 해도 맨날 모르겠는 설정 중 하나인 것 같다.

포스팅을 하면서 다시 기본을 익히는 시간을 갖도록 해야겠다.

0. 참고 및 코드

spring.io

블로그

해당 코드는 여기에서 확인 가능합니다. 😉

1. 환경

JAVA 8

Spring Boot 2.7.3

Spring Security 2.7.3

2. 기본 설정

1. build.gradle

 implementation 'org.springframework.boot:spring-boot-starter-security'

2. SecurityConfig

spring security 5.7 이상 버전부터 WebSecurityConfigurerAdapter가 Deprecated되었다.

spring boot 2.7.3spring-security 5.7.3 버전을 포함하고 있다. 따라서, 어댑터가 아닌 bean 등록방식으로 개발을 진행해야한다.

많이 달라지진 않았고, 기존 configure(WebSecurity web)를 오버라이딩 한 코드를 filterChain(HttpSecurity security) 에 포함시켜주었다.

변경 전

@Configuration
@EnableWebSecurity(debug = false)
@RequiredArgsConstructor
@Slf4j
public class SecurityConfig extends WebSecurityConfigurerAdapter {

  private final AuthenticationProvider authenticationProvider;
  private final SecurityResourceService securityResourceService;
  private final FilterChainExceptionHandler filterChainExceptionHandler;
  private final CustomAuthenticationEntryPoint customAuthenticationEntryPoint;
  private final CustomAccessDeniedHandler customAccessDeniedHandler;
  private final TokenProvider tokenProvider;

  @Override
  public void configure(WebSecurity web) throws Exception {
    web.ignoring()
        .antMatchers("스웨거나 docs 관련 url")  
        .antMatchers("css, js 관련 url")
    ;
  }

  @Override
  protected void configure(HttpSecurity security) throws Exception {
    // 관련 코드들.. 
  }
}

변경 후

@Configuration
@EnableWebSecurity
@RequiredArgsConstructor
@EnableGlobalMethodSecurity(securedEnabled = true, prePostEnabled = true)
public class SecurityConfig {

  @Bean
  public SecurityFilterChain filterChain(HttpSecurity security) throws Exception {

    security.csrf().disable()
        .headers().frameOptions().disable();

    security.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS);

    security.authorizeHttpRequests()
        .antMatchers("스웨거나 docs 관련 url","css, js 관련 url").permitAll()
        .antMatchers("/admin").hasRole("ROLE_ADMIN")
        .antMatchers("/**").permitAll()
        .anyRequest().authenticated();

    security.formLogin().disable();

    security.httpBasic().disable();

    return security.build();
  }

}

해당 코드는 Rest API 개발을 바탕으로 작성하였기에 formLogin을 disable 해주었다.

3. 테스트

/admin url은 ROLE_ADMIN 만, 나머지 url은 모두 접근 가능하도록 간단하게 설정해주었다.

컨트롤러를 만들어 테스트를 돌린결과, /admin 에는 403 이, /user에는 200의 결과가 잘 발생하였다.

/admin

/user

반응형

댓글