[SPRING] 스프링 csrf 토큰 변수의 이름 바꾸기
SPRING스프링 csrf 토큰 변수의 이름 바꾸기
내 응용 프로그램이 다른 포털 응용 프로그램에서 실행됩니다. 둘 다 봄에 구현되며 둘 다 csrf 보안을 사용합니다.
기본적으로 세션에서 csrf 토큰의 이름이 변경되므로 토큰이 충돌없이 작동 할 수 있습니다. 지금까지 시도한 것은 다른 토큰 리포지토리를 만들고 보안 구성 클래스에서 매개 변수 이름과 세션 특성 이름을 변경하려고하는 것입니다.
final HttpSessionCsrfTokenRepository tokenRepository = new HttpSessionCsrfTokenRepository();
tokenRepository.setHeaderName("TOOLBIZ-CSRF-TOKEN");
tokenRepository.setParameterName("toolbiz_csfr");
//tokenRepository.setSessionAttributeName("toolbiz_csrf");
요청을하면 Spring은이 새로운 설정을별로 좋아하지 않으며 로그는 다음 줄을 생성합니다.
Invalid CSRF token found
더 무엇을해야합니까? 내가 놓친 게 있니?
해결법
-
==============================
1.이것은 나를 위해 일한 것입니다 :
이것은 나를 위해 일한 것입니다 :
@Configuration @Order(SecurityProperties.ACCESS_OVERRIDE_ORDER) public class OptosoftWebfrontSecurity extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { http.authorizeRequests().antMatchers("/assets/**").permitAll() .anyRequest().authenticated().and().formLogin().and() .httpBasic().disable() .addFilterAfter(new CsrfHeaderFilter(), CsrfFilter.class) .csrf().csrfTokenRepository(csrfTokenRepository()); } private CsrfTokenRepository csrfTokenRepository() { HttpSessionCsrfTokenRepository repository = new HttpSessionCsrfTokenRepository(); repository.setHeaderName("X-XSRF-TOKEN"); repository.setParameterName("_csrf"); return repository; } }
그리고 필터 : -
public class CsrfHeaderFilter extends OncePerRequestFilter { @Override protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException { CsrfToken csrf = (CsrfToken) request.getAttribute(CsrfToken.class .getName()); if (csrf != null) { Cookie cookie = WebUtils.getCookie(request, "XSRF-TOKEN"); String token = csrf.getToken(); if (cookie == null || token != null && !token.equals(cookie.getValue())) { cookie = new Cookie("XSRF-TOKEN", token); cookie.setPath("/"); response.addCookie(cookie); } } filterChain.doFilter(request, response); } }
WebSecurityConfigurerAdapter # configure 메소드를 대체 했습니까?
-
==============================
2.헤더의 이름을 바꾸기 전에 보유하고있는 쿠키를 삭제하십시오. 모든 것이 잘 설정된 동일한 문제가 있었지만 브라우저의 오래된 쿠키가 필터 기능을 기본적으로 쓸모 없게 만들었습니다.
헤더의 이름을 바꾸기 전에 보유하고있는 쿠키를 삭제하십시오. 모든 것이 잘 설정된 동일한 문제가 있었지만 브라우저의 오래된 쿠키가 필터 기능을 기본적으로 쓸모 없게 만들었습니다.
from https://stackoverflow.com/questions/31293303/renaming-spring-csrf-token-variable by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] 최대 절전 모드 + 봄 응용 프로그램에서 mysql으로 csv 파일을 가져 오는 방법은 무엇입니까? (0) | 2019.05.02 |
---|---|
[SPRING] 스프링 부트의 임베디드 바람둥이 전쟁을 어떻게 확장 할 것인가? (0) | 2019.05.02 |
[SPRING] org.springframework.web.client.RestClientException : 응답을 추출 할 수 없습니다 : (0) | 2019.05.02 |
[SPRING] org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter ERROR (0) | 2019.05.02 |
[SPRING] 바람둥이에 대한 분산 HTTP 세션 상태 서버 (0) | 2019.05.02 |