我最近将我的项目从Vaadin 23.1升级到了23.2,并且升级了我的Spring Security配置类以扩展VaadinWebSecurity
。我的项目还有一个自定义的WebSocket端点,该端点在某个URL处公开。在更改为VaadinWebSecurity之前,它工作正常。但是在升级之后,它不再是可访问的。相反,看起来我正在连接到一个Vaadin WebSocket。可能是新的SecurityFilterChain正在覆盖我的配置。
连接后收到的消息:
for(;;);[{"meta":{"async":true,"sessionExpired":true}}]
安全配置
@EnableWebSecurity
@Configuration
public class SecurityConfiguration extends VaadinWebSecurity {
public static final String LOGOUT_URL = "/";
public static final String WEBSOCKET_URl = "/websocket";
//...
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
.antMatchers(WEBSOCKET_URl)
.permitAll();
super.configure(http);
setLoginView(http, LoginView.class, LOGOUT_URL);
}
}
示例WebSocket处理程序
@Configuration
@EnableWebSocket
public class Websocket implements WebSocketConfigurer {
@Override
public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
registry
.addHandler(new WebSocketHandler() {
@Override
public void afterConnectionEstablished(WebSocketSession session) throws Exception {
session.sendMessage(new TextMessage("this is a response"));
}
// ...
}, SecurityConfiguration.WEBSOCKET_URl)
.setAllowedOriginPatterns("*");
}
}
我创建了一个基于start.vaadin.com的最小示例项目。它包含一个示例WebSocket处理程序。
- sample-webscoket-vaadin.zip
- Vaadin /流量版本:23.2.1
- Java版本:17
有人能给予我一些建议吗?如何让WebSocket重新运行?
1条答案
按热度按时间klh5stk11#
Atmosphere处理程序正在拦截请求。我已经做了一些测试,安全配置很好,因为连接已经建立。排除Atmosphere依赖项后,Spring WS处理程序按预期工作。
这似乎是流中的一个错误,我已经创建了https://github.com/vaadin/flow/issues/14602
排除解决方法: