我springboot的websocket访问时总是会因为没有token被拦截,我该怎么让它不校验token
时间: 2024-10-01 07:12:08 浏览: 27
在Spring Boot中,如果使用WebSocket并进行了身份验证(通常通过JWT令牌),在每个消息传递之前都会检查Token以确认用户权限。如果你想让WebSocket连接不进行Token验证,你可以采取以下几个步骤:
1. **关闭全局WebSecurity配置**:如果你的应用启动时默认开启了`WebSecurityConfigurerAdapter`,可以考虑取消对WebSocket的自动配置,或者针对WebSocket单独禁用Token验证。这可以通过修改`SecurityConfig`类来实现,移除或注释掉JWT相关的配置。
```java
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
// 如果不需要WebSocket的JWT验证
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
.antMatchers("/ws/**").permitAll() // 允许所有WebSocket请求
// ...其他授权规则...
.anyRequest().authenticated();
// ...去掉JWT相关配置如:http.csrf().disable(), http.cors().and().csrf().disable();
}
// 如果有JWTFilter,可以移除它或者添加一个排除列表
@Bean
public JwtAuthenticationFilter jwtAuthenticationFilter() {
return new JwtAuthenticationFilter(...);
}
}
```
2. **自定义WebSocketHandler工厂**:创建一个自定义的`WebSocketHandlerFactory`,在这个工厂中直接创建WebSocketHandler实例而不经过认证过程。例如:
```java
@Bean
public WebSocketHandler webSocketHandler(YourService yourService) {
return new CustomWebSocketHandler(yourService);
}
class CustomWebSocketHandler implements TextWebSocketHandler {
private final YourService yourService;
// 构造函数注入服务
public CustomWebSocketHandler(YourService yourService) {
this.yourService = yourService;
}
// WebSocket处理逻辑,这里不会做Token验证
@Override
public void handleTextMessage(ChannelHandlerContext channelHandlerContext, TextWebSocketFrame frame) throws Exception {
// ...
}
}
```
阅读全文