Backend/SpringBoot

Spring Security (Configuration, EnableWebSecurity 어노테이션)

Dean83 2024. 10. 25. 13:49
  • 인증 (Auth) 기능 및 보안기능을 사용하기 위한 프레임 워크이다.
  • 간략 요약
    • build.gradle 에서 프레임워크 추가
    • @Configuration, @EnableWebSecurity 어노테이션을 사용하는 config용 클래스 생성
      • 클래스에서 각종 시큐리티 관련 세팅 진행

 

  • 설치 (build.gradle)
 implementation 'org.springframework.boot:spring-boot-starter-security'
  • @Configuration 어노테이션
    • 스프링 환경설정임을 알리는 어노테이션
    • Security 관련 환경설정 뿐 아니라 AWS 연동, 구글 API 연동등의 환경설정도 할 수 있다.
  • @EnableWebSecurity
    • 모든 API 통신에 스프링 시큐리티를 활성화 함
  • SecurityFilterChain 클래스를 리턴하는 함수 작성 하고, 설정을 추가함
    • csrf, request 퍼미션, jwt, cors 등등
    • WebSecurityConfigurerAdapter 는 더이상 지원되지 않아, SecurityFilterChain 클래스를 리턴하는 함수 작성 필요.
package com.example.test1.test1;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.web.SecurityFilterChain;
import org.springframework.security.web.header.writers.frameoptions.XFrameOptionsHeaderWriter;
import org.springframework.security.web.util.matcher.AntPathRequestMatcher;

@Configuration
@EnableWebSecurity
public class security {

    @Bean
    SecurityFilterChain securitySetting(HttpSecurity sec) throws Exception
    {
        //h2 콘솔을 위한 설정으로, csrf 예외처리 url 설정
        //requestMatchers 는 request 요청에 대해 권한부여
        //headers 는 h2 콘솔의 xframe 허용 (같은 사이트 내 허용) - xframe은 클릭 DDos 방지용
        sec.csrf(csrf -> csrf.ignoringRequestMatchers("/console/**"))
            .authorizeHttpRequests(httpreq -> httpreq.requestMatchers(new AntPathRequestMatcher("/**")).permitAll())
            .headers(headers -> headers.addHeaderWriter(new XFrameOptionsHeaderWriter(XFrameOptionsHeaderWriter.XFrameOptionsMode.SAMEORIGIN)))
            .cors(corsCustomizer -> corsCustomizer.configure(sec));
            
            ......필요시 추가 작성
        return sec.build();
    }

    
}
  • 설정은 워낙 많고 복잡해서 필요시 마다 구글검색 하는게 좋을듯 하다. 
  • JWT 세팅이 꽤 복잡하다.