refactor: 修改 websocket 配置.
This commit is contained in:
@@ -14,6 +14,7 @@ import org.springframework.beans.factory.config.MethodInvokingFactoryBean;
|
|||||||
import org.springframework.boot.autoconfigure.AutoConfiguration;
|
import org.springframework.boot.autoconfigure.AutoConfiguration;
|
||||||
import org.springframework.boot.autoconfigure.AutoConfigureOrder;
|
import org.springframework.boot.autoconfigure.AutoConfigureOrder;
|
||||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
|
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
|
||||||
|
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
|
||||||
import org.springframework.boot.context.properties.EnableConfigurationProperties;
|
import org.springframework.boot.context.properties.EnableConfigurationProperties;
|
||||||
import org.springframework.context.ApplicationContext;
|
import org.springframework.context.ApplicationContext;
|
||||||
import org.springframework.context.annotation.Bean;
|
import org.springframework.context.annotation.Bean;
|
||||||
@@ -162,8 +163,9 @@ public class OrionSecurityAutoConfiguration {
|
|||||||
* @return websocket 安全策略
|
* @return websocket 安全策略
|
||||||
*/
|
*/
|
||||||
@Bean
|
@Bean
|
||||||
public WebsocketAuthorizeRequestsCustomizer websocketAuthorizeRequestsCustomizer() {
|
@ConditionalOnProperty(value = "orion.websocket.prefix")
|
||||||
return new WebsocketAuthorizeRequestsCustomizer();
|
public WebsocketAuthorizeRequestsCustomizer websocketAuthorizeRequestsCustomizer(@Value("${orion.websocket.prefix}") String prefix) {
|
||||||
|
return new WebsocketAuthorizeRequestsCustomizer(prefix);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -12,10 +12,16 @@ import org.springframework.security.config.annotation.web.configurers.Expression
|
|||||||
*/
|
*/
|
||||||
public class WebsocketAuthorizeRequestsCustomizer extends AuthorizeRequestsCustomizer {
|
public class WebsocketAuthorizeRequestsCustomizer extends AuthorizeRequestsCustomizer {
|
||||||
|
|
||||||
|
private final String prefix;
|
||||||
|
|
||||||
|
public WebsocketAuthorizeRequestsCustomizer(String prefix) {
|
||||||
|
this.prefix = prefix;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void customize(ExpressionUrlAuthorizationConfigurer<HttpSecurity>.ExpressionInterceptUrlRegistry registry) {
|
public void customize(ExpressionUrlAuthorizationConfigurer<HttpSecurity>.ExpressionInterceptUrlRegistry registry) {
|
||||||
// websocket 允许匿名访问
|
// websocket 允许匿名访问
|
||||||
registry.antMatchers("/orion/keep-alive/**").permitAll();
|
registry.antMatchers(prefix + "/**").permitAll();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -20,14 +20,14 @@ import org.springframework.web.socket.server.standard.ServletServerContainerFact
|
|||||||
@EnableWebSocket
|
@EnableWebSocket
|
||||||
@AutoConfiguration
|
@AutoConfiguration
|
||||||
@AutoConfigureOrder(AutoConfigureOrderConst.FRAMEWORK_WEBSOCKET)
|
@AutoConfigureOrder(AutoConfigureOrderConst.FRAMEWORK_WEBSOCKET)
|
||||||
@EnableConfigurationProperties(WebsocketConfig.class)
|
@EnableConfigurationProperties(WebSocketConfig.class)
|
||||||
public class OrionWebsocketAutoConfiguration {
|
public class OrionWebSocketAutoConfiguration {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return websocket 缓冲区大小配置
|
* @return websocket 缓冲区大小配置
|
||||||
*/
|
*/
|
||||||
@Bean
|
@Bean
|
||||||
public ServletServerContainerFactoryBean servletServerContainerFactoryBean(WebsocketConfig config) {
|
public ServletServerContainerFactoryBean servletServerContainerFactoryBean(WebSocketConfig config) {
|
||||||
ServletServerContainerFactoryBean factory = new ServletServerContainerFactoryBean();
|
ServletServerContainerFactoryBean factory = new ServletServerContainerFactoryBean();
|
||||||
factory.setMaxBinaryMessageBufferSize(config.getBinaryBufferSize());
|
factory.setMaxBinaryMessageBufferSize(config.getBinaryBufferSize());
|
||||||
factory.setMaxTextMessageBufferSize(config.getBinaryBufferSize());
|
factory.setMaxTextMessageBufferSize(config.getBinaryBufferSize());
|
||||||
@@ -11,8 +11,8 @@ import org.springframework.boot.context.properties.ConfigurationProperties;
|
|||||||
* @since 2023/6/25 19:57
|
* @since 2023/6/25 19:57
|
||||||
*/
|
*/
|
||||||
@Data
|
@Data
|
||||||
@ConfigurationProperties("spring.websocket")
|
@ConfigurationProperties("orion.websocket")
|
||||||
public class WebsocketConfig {
|
public class WebSocketConfig {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 二进制消息缓冲区大小 byte
|
* 二进制消息缓冲区大小 byte
|
||||||
@@ -29,4 +29,10 @@ public class WebsocketConfig {
|
|||||||
*/
|
*/
|
||||||
private Long sessionIdleTimeout;
|
private Long sessionIdleTimeout;
|
||||||
|
|
||||||
|
public WebSocketConfig() {
|
||||||
|
this.binaryBufferSize = 1024 * 1024;
|
||||||
|
this.textBufferSize = 1024 * 1024;
|
||||||
|
this.sessionIdleTimeout = 30 * 60 * 1000L;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,34 @@
|
|||||||
|
{
|
||||||
|
"groups": [
|
||||||
|
{
|
||||||
|
"name": "orion.websocket",
|
||||||
|
"type": "com.orion.ops.framework.websocket.config.WebSocketConfig",
|
||||||
|
"sourceType": "com.orion.ops.framework.websocket.config.WebSocketConfig"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"properties": [
|
||||||
|
{
|
||||||
|
"name": "orion.websocket.prefix",
|
||||||
|
"type": "java.lang.String",
|
||||||
|
"description": "公共 websocket 前缀"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "orion.websocket.binary-buffer-size",
|
||||||
|
"type": "java.lang.Integer",
|
||||||
|
"description": "二进制消息缓冲区大小 byte.",
|
||||||
|
"defaultValue": "1048576"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "orion.websocket.text-buffer-size",
|
||||||
|
"type": "java.lang.Integer",
|
||||||
|
"description": "文本消息缓冲区大小 byte.",
|
||||||
|
"defaultValue": "1048576"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "orion.websocket.session-idle-timeout",
|
||||||
|
"type": "java.lang.Long",
|
||||||
|
"description": "session 最大超时时间 ms.",
|
||||||
|
"defaultValue": "1800000"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -1 +1 @@
|
|||||||
com.orion.ops.framework.websocket.config.OrionWebsocketAutoConfiguration
|
com.orion.ops.framework.websocket.config.OrionWebSocketAutoConfiguration
|
||||||
@@ -19,13 +19,6 @@ spring:
|
|||||||
mvc:
|
mvc:
|
||||||
pathmatch:
|
pathmatch:
|
||||||
matching-strategy: ANT_PATH_MATCHER
|
matching-strategy: ANT_PATH_MATCHER
|
||||||
websocket:
|
|
||||||
# 1MB
|
|
||||||
binary-buffer-size: 1048576
|
|
||||||
# 1MB
|
|
||||||
text-buffer-size: 1048576
|
|
||||||
# 30MIN
|
|
||||||
session-idle-timeout: 1800000
|
|
||||||
datasource:
|
datasource:
|
||||||
druid:
|
druid:
|
||||||
driver-class-name: com.mysql.cj.jdbc.Driver
|
driver-class-name: com.mysql.cj.jdbc.Driver
|
||||||
@@ -129,10 +122,19 @@ orion:
|
|||||||
# 版本
|
# 版本
|
||||||
version: @revision@
|
version: @revision@
|
||||||
api:
|
api:
|
||||||
# 公共api前缀
|
# 公共 api 前缀
|
||||||
prefix: /orion-api
|
prefix: /orion-api
|
||||||
# 是否开启跨域
|
# 是否开启跨域
|
||||||
cors: true
|
cors: true
|
||||||
|
websocket:
|
||||||
|
# 公共 websocket 前缀
|
||||||
|
prefix: /orion/keep-alive
|
||||||
|
# 1MB
|
||||||
|
binary-buffer-size: 1048576
|
||||||
|
# 1MB
|
||||||
|
text-buffer-size: 1048576
|
||||||
|
# 30MIN
|
||||||
|
session-idle-timeout: 1800000
|
||||||
swagger:
|
swagger:
|
||||||
# swagger 配置
|
# swagger 配置
|
||||||
title: orion-ops-pro 运维平台
|
title: orion-ops-pro 运维平台
|
||||||
|
|||||||
@@ -1,37 +0,0 @@
|
|||||||
package com.orion.ops.module.asset.interceptor;
|
|
||||||
|
|
||||||
import com.orion.ops.framework.websocket.core.interceptor.UserHandshakeInterceptor;
|
|
||||||
import org.springframework.context.annotation.Configuration;
|
|
||||||
import org.springframework.stereotype.Component;
|
|
||||||
import org.springframework.web.socket.TextMessage;
|
|
||||||
import org.springframework.web.socket.WebSocketSession;
|
|
||||||
import org.springframework.web.socket.config.annotation.WebSocketConfigurer;
|
|
||||||
import org.springframework.web.socket.config.annotation.WebSocketHandlerRegistry;
|
|
||||||
import org.springframework.web.socket.handler.TextWebSocketHandler;
|
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author Jiahang Li
|
|
||||||
* @version 1.0.0
|
|
||||||
* @since 2023/12/27 23:53
|
|
||||||
*/
|
|
||||||
// @Configuration
|
|
||||||
public class TerminalInterceptor1 implements WebSocketConfigurer {
|
|
||||||
|
|
||||||
@Resource
|
|
||||||
private UserHandshakeInterceptor userHandshakeInterceptor;
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
|
|
||||||
registry.addHandler(new TextWebSocketHandler() {
|
|
||||||
@Override
|
|
||||||
protected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception {
|
|
||||||
System.out.println(message);
|
|
||||||
}
|
|
||||||
}, "/orion/keep-alive/host/terminal1")
|
|
||||||
.addInterceptors(userHandshakeInterceptor)
|
|
||||||
.setAllowedOrigins("*");
|
|
||||||
System.out.println("1231");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Reference in New Issue
Block a user