Я внедряю csrf в Spring Boot + Angular 7 Application, меня беспокоит, когда я делаю вход в систему, тогда я могу войти в приложение без каких-либо проблем.Но после того как логин csrf cookie не меняется, я получаю от сервера ошибку 403 (CSRF expired),
Но когда я обновляюсь, он будет работать правильно.Основная причина заключается в том, что cookie не загружается должным образом, я не знаю, где возникает проблема, например, на стороне клиента или на стороне сервера.Пожалуйста, помогите
Я поделился своим кодом
Spring Boot Code
@Override
protected void configure(HttpSecurity http) throws Exception {
http.httpBasic().and().csrf() // csrf config starts here
.csrfTokenRepository(csrfTokenRepository())
.ignoringAntMatchers("/", "/login", "/captcha-servlet", "/validateOTP", "supportApp/logout")
.and()
.addFilterAfter(new CustomCsrfFilter(), CsrfFilter.class);
}
private CsrfTokenRepository csrfTokenRepository() {
HttpSessionCsrfTokenRepository repository = new HttpSessionCsrfTokenRepository();
repository.setHeaderName("X-XSRF-TOKEN");
return repository;
}
CSRF Filter
public class CustomCsrfFilter 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();
cookie = new Cookie("XSRF-TOKEN", token);
cookie.setPath("/");
response.addCookie(cookie);
}
filterChain.doFilter(request, response);
}
}
Угловой код CSRF
<code>import { HttpClient, HttpXsrfTokenExtractor, HttpHeaders } from '@angular/common/http';
<code>constructor(private http: HttpClient, private tokenExtractor: HttpXsrfTokenExtractor) { }
<code>const _csrf_token = this.tokenExtractor.getToken() as string;
return this.http.post(this._singleuserUrl, uid, {headers: new HttpHeaders().set('X-XSRF-TOKEN', _csrf_token), withCredentials: true});