출처 : 점프 투 스프링부트
스프링 시큐리티는 스프링 기반 애플리케이션의 인증과 권한을 담당하는 스프링의 하위 프레임워크이다.
build.gradle 파일 수정
implementation 'org.spring.framework.boot:spring-boot-starter-security' implementation 'org.thymeleaf.extras:thymeleaf-extras-springsecurity6:3.1.1.RELEASE'
이제 서버를 재시작 하고 list 화면에 접속하면 로그인 화면이 나타난다.
스프링 시큐리티는 기본적으로 인증되지 않은 사용자에게 서비스를 제공하지 않기때문에 로그인 화면이 나타난다.
로그인 없이도 게시물 조회가 가능하도록 하기 위해 SecurityConfig.java 파일을 작성하자.
SecurityConfig.java
@Configuration
@EnableWebSecurity
public class SecurityConfig {
@Bean
SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
http
.authorizeHttpRequests((authorizeHttpRequests) -> authorizeHttpRequests
.requestMatchers(new AntPathRequestMatcher("/**")).permitAll())
.csrf((csrf) -> csrf
.ignoringRequestMatchers(new AntPathRequestMatcher("/h2-console/**")))
.headers((headers) -> headers
.addHeaderWriter(new XFrameOptionsHeaderWriter(
XFrameOptionsHeaderWriter.XFrameOptionsMode.SAMEORIGIN)))
;
return http.build();
}
}
@Configuration
@EnableWebSecurity
SecurityFilterChain
빈 생성/h2-console/
로 시작하는 URL은 CSRF 검증을 하지 않는다는 설정 추가CSRF란?
cross site request forgery는 웹 사이트 취약점 공격을 방지하기 위해 사용하는 기술이다. 스프링 시큐리티가 CSRF 토큰 값을 세션을 통해 발행하고 웹 페이지에서는 폼 전송시에 해당 토큰을 함께 전송하여 실제 웹 페이지에서 작성된 데이터가 전달되는지를 검증하는 기술이다.