spring-security 升级到VaadinWebSecurity会中断自定义WebSocket

eaf3rand  于 2022-11-11  发布在  Spring
关注(0)|答案(1)|浏览(149)

我最近将我的项目从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处理程序。

有人能给予我一些建议吗?如何让WebSocket重新运行?

klh5stk1

klh5stk11#

Atmosphere处理程序正在拦截请求。我已经做了一些测试,安全配置很好,因为连接已经建立。排除Atmosphere依赖项后,Spring WS处理程序按预期工作。
这似乎是流中的一个错误,我已经创建了https://github.com/vaadin/flow/issues/14602
排除解决方法:

<dependency>
    <groupId>com.vaadin</groupId>
    <!-- Replace artifactId with vaadin-core to use only free components -->
    <artifactId>vaadin</artifactId>
    <exclusions>
        <exclusion>
            <groupId>com.vaadin.external.atmosphere</groupId>
            <artifactId>atmosphere-runtime</artifactId>
        </exclusion>
    </exclusions>
</dependency>

相关问题