У меня есть существующее веб-приложение, которое использует весеннюю безопасность для аутентификации. Он также использует управление сеансом, чтобы позволить пользователю войти в систему в течение предопределенного периода времени и жетоны XSRF для предотвращения атак XSS.Spring Security session/xsrf configuration by path
@Override
protected void configure(HttpSecurity http) throws Exception {
// @formatter:off
http
.exceptionHandling()
.authenticationEntryPoint(restEntryPoint())
.and()
.headers().addHeaderWriter(new StaticHeadersWriter("Server",""))
.and()
.httpBasic()
.authenticationEntryPoint(restEntryPoint())
.and()
.logout().addLogoutHandler(myLogoutHandler())
.logoutSuccessHandler(logoutSuccessHandler())
.and()
.authorizeRequests()
.antMatchers("/index.html", "/login", "/").permitAll()
.antMatchers(HttpMethod.OPTIONS).denyAll()
.antMatchers(HttpMethod.HEAD).denyAll()
.anyRequest().authenticated()
.and()
.authenticationProvider(myAuthenticationProvider)
.csrf()
.csrfTokenRepository(csrfTokenRepository())
.and()
.addFilterAfter(csrfHeaderFilter(), SessionManagementFilter.class);
// @formatter:on
}
Это отлично работает для веб-приложения. Однако теперь мне предлагается добавить конфигурацию, которая позволит сторонним клиентским приложениям вызывать мои сервисы с помощью чистых вызовов REST, то есть они должны быть полностью безстоящими и использовать HTTP-аутентификацию - сеанс не должен быть создан, а xsrf должен быть отключен (I думать...).
Я могу определить общий путь URL для всех этих вызовов клиентского API. Но как я могу использовать существующую конфигурацию безопасности и сервер для поддержки обоих требований?