내용

글번호 1237
작성자 허진경 (나자바바)
작성일 2023-09-07 12:17:09
제목 스프링 시큐리티에서 CSRF 사용하기
내용 스프링 시큐리티와 타임리프를 함께 사용할 때 CSRF(Cross-Site Request Forgery) 토큰을 추가하는 방법은 다음과 같습니다. 1. 스프링 시큐리티 설정: 먼저, 스프링 시큐리티 설정에서 CSRF 토큰을 활성화해야 합니다. 스프링 부트의 경우, 아래와 같이 설정할 수 있습니다. 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.csrf.CsrfFilter; import org.springframework.security.web.csrf.CsrfTokenRepository; import org.springframework.security.web.csrf.HttpSessionCsrfTokenRepository; import org.springframework.web.filter.CharacterEncodingFilter; @Configuration @EnableWebSecurity public class SecurityConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { http .authorizeRequests() .antMatchers("/public/**").permitAll() // 공개 페이지는 보안 검사에서 제외 .anyRequest().authenticated() .and() .formLogin() .loginPage("/login") .permitAll() .and() .logout() .permitAll() .and() .addFilterBefore(new CharacterEncodingFilter("UTF-8", true), CsrfFilter.class) // 필요한 경우 문자 인코딩 필터 추가 .csrf() .csrfTokenRepository(csrfTokenRepository()); } @Bean public CsrfTokenRepository csrfTokenRepository() { HttpSessionCsrfTokenRepository repository = new HttpSessionCsrfTokenRepository(); repository.setHeaderName("X-CSRF-TOKEN"); // HTTP 헤더에 CSRF 토큰 이름을 설정 return repository; } } 이 코드에서 configure(HttpSecurity http) 메서드 내에서 CSRF 토큰을 활성화하고 csrfTokenRepository 빈을 정의하여 HttpSessionCsrfTokenRepository를 사용하도록 설정합니다. 또한, setHeaderName을 사용하여 CSRF 토큰이 포함된 HTTP 헤더의 이름을 설정합니다. 2. 타임리프 템플릿에서 CSRF 토큰 사용: <input type="hidden" th:name="${_csrf.parameterName}" th:value="${_csrf.token}" />
첨부파일 CSRF.hwp (202,752byte)