- 인증 (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 이곳에서 보안 관련 내용을 정리해 두었다.
'Backend > SpringBoot' 카테고리의 다른 글
| Query 어노테이션(JPQL) 및 JPA의 Specification (0) | 2024.10.25 |
|---|---|
| Bean 어노테이션 (W.Configuration, Component 어노테이션) (1) | 2024.10.25 |
| DTO (W. Data, Build 어노테이션) (0) | 2024.10.24 |
| Paging (0) | 2024.10.24 |
| [기본구조4] 서비스 (0) | 2024.10.23 |