Я использую WebSecurity
в своем проекте. Аутентификация пользователя использует токен JWT в заголовке. Http-запросы работают нормально, но я не могу установить sh соединение через веб-сокет. Моя конфигурация безопасности:
@Override
protected void configure(HttpSecurity http) throws Exception {
http .cors()
.and().csrf().disable()
.authorizeRequests()
.antMatchers(HttpMethod.POST, SIGN_UP_URL).permitAll()
.antMatchers("/ws**").permitAll()
.anyRequest().authenticated()
.and()
.addFilter(new JWTAuthenticationFilter(authenticationManager()))
.addFilter(new JWTAuthorizationFilter(authenticationManager()));
}
@Bean
public CorsConfigurationSource corsConfigurationSource() {
CorsConfiguration configuration = new CorsConfiguration();
configuration.setAllowedOrigins(Arrays.asList("*"));
configuration.setAllowedMethods(Arrays.asList("GET", "POST", "PUT", "PATCH", "DELETE", "OPTIONS"));
configuration.setAllowedHeaders(Arrays.asList("authorization", "content-type", "x-auth-token","Accept","Cache"));
configuration.setExposedHeaders(Arrays.asList("Authorization, body"));
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
source.registerCorsConfiguration("/**", configuration);
return source;
}
@Override
public void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.userDetailsService(userDetailsService).passwordEncoder(bCryptPasswordEncoder);
}
И мой WebSocketConfig
@Configuration
@EnableWebSocket
public class WebSocketConfig implements WebSocketMessageBrokerConfigurer{
public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
registry.addHandler(new SocketHandler(), "/user_sock").addInterceptors(new HttpSessionHandshakeInterceptor())
.setAllowedOrigins("*");;
}
}
Я пытался отреагировать как клиентом, так и расширением chorme для тестирования, но я получаю такой же ответ об ошибке.
WebSocket connection to 'ws://localhost:8080/websocket' failed: Error during WebSocket handshake: Unexpected response code: 403
Любая помощь будет принята с благодарностью. Спасибо