Backend/SpringBoot

Spring Security 기본 설정

Dean83 2024. 10. 25. 13:49
  • 인증 (Auth) 기능 및 보안기능을 사용하기 위한 프레임 워크이다.
  • 간략 요약
    • build.gradle 에서 프레임워크 추가
    • @Configuration, @EnableWebSecurity 어노테이션을 사용하는 config용 클래스 생성
      • 클래스에서 각종 시큐리티 관련 세팅 진행
      • SecurityFilterChain을 Bean으로 등록하여 적용하는 방식을 주로 사용한다.
    • 설정을 따로 하지 않고, 기본적으로 의존성 추가만 했을경우 자동으로 동작하는 방식은 다음과 같다.
      • 루트를 포함한 모든 엔드포인트 접근시 인증 요구
      • 기본 로그인 페이지 제공 (/login)
      • 폼 로그인 활성화
      • HTTP Basic 인증 활성화
      • 기본 로그아웃 기능 활성화 (/logout)
      • CSRF 보호 활성화

 

  • 설치 (build.gradle)
 implementation 'org.springframework.boot:spring-boot-starter-security'
  • @Configuration 어노테이션
    • 스프링 환경설정임을 알리는 어노테이션
    • Security 관련 환경설정 뿐 아니라 AWS 연동, 구글 API 연동등의 환경설정도 할 수 있다.
  • @EnableWebSecurity
    • 모든 API 통신에 스프링 시큐리티를 활성화 함
  • SecurityFilterChain 클래스를 리턴하는 함수 작성 하고, 설정을 추가함 (Bean 등록)
    • 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 세팅이 꽤 복잡하다.

 

https://dean83.tistory.com/380 이곳에서 보안 관련 내용을 정리해 두었다.