This is an automated email from the ASF dual-hosted git repository.
casion pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/linkis.git
The following commit(s) were added to refs/heads/master by this push:
new bf1cb5bce2 [LINKIS-1.9.0] Feature toggles, dependency optimization and
bug fixes for linkis-web and backend (#5400)
bf1cb5bce2 is described below
commit bf1cb5bce2de44a2728e594319e422dd6f7ed0e4
Author: aiceflower <[email protected]>
AuthorDate: Thu Apr 2 19:48:17 2026 +0800
[LINKIS-1.9.0] Feature toggles, dependency optimization and bug fixes for
linkis-web and backend (#5400)
* update version to 1.9.0
* #AI commit# refactor: 调整 GatewaySpringConfiguration 中 SecurityFilter 设置逻辑
- 添加 userRestful 字段注入
- 将 SecurityFilter.setUserRestful 调用从 createUserRestful 方法移至 @PostConstruct
init 方法
* #AI commit# refactor: 升级 Knife4j 和 Springfox 到 3.x 版本
- 在 apache profile 中升级 knife4j.version 从 2.0.9 到 3.0.3
- 在 apache profile 中升级 springfox.version 从 2.10.5 到 3.0.0
- 添加 hbase-shaded-jetty 和 hbase-protocol-shaded 排除依赖,解决 Jetty 冲突
- SwaggerBeanPostProcessor 保持兼容 Springfox 3.x API
修复问题:
- 解决 publicservice 服务启动失败问题
- 解决 DynamicResponseModelReader 依赖 TypeNameExtractor 错误
- 解决 Jetty ServletHolder.setClassFrom IllegalStateException 错误
Co-Authored-By: Claude Opus 4.6 <[email protected]>
* #AI COMMIT# Exclude hbase dependencies from JDBC and Hive engine
connectors
Add exclusions for hbase-shaded-jetty and hbase-protocol-shaded to prevent
Jetty class conflicts in JDBC and Hive EngineConn plugins.
Modified files:
- linkis-engineconn-plugins/jdbc/pom.xml
- linkis-engineconn-plugins/hive/pom.xml
* #AI COMMIT# Exclude hbase-shaded-jetty from assembly packaging
Add hbase-shaded-jetty and hbase-protocol-shaded exclusions to
distribution.xml
files to prevent Jetty class conflicts at runtime.
Modified files:
- linkis-public-enhancements/distribution.xml
- linkis-engineconn-plugins/hive/src/main/assembly/distribution.xml
- linkis-engineconn-plugins/jdbc/src/main/assembly/distribution.xml
* #AI COMMIT# Use wildcard pattern to exclude all hbase-shaded jars
Change from excluding individual hbase-shaded-* jars to using wildcard
pattern to exclude all hbase-shaded packages at once.
Modified files:
- linkis-public-enhancements/distribution.xml
- linkis-engineconn-plugins/hive/src/main/assembly/distribution.xml
- linkis-engineconn-plugins/jdbc/src/main/assembly/distribution.xml
* #AI COMMIT# Exclude all hbase-shaded jars explicitly
List each hbase-shaded jar explicitly instead of using wildcard pattern
which doesn't work with Maven assembly plugin.
Modified files:
- linkis-public-enhancements/distribution.xml
- linkis-engineconn-plugins/hive/src/main/assembly/distribution.xml
- linkis-engineconn-plugins/jdbc/src/main/assembly/distribution.xml
* #AI COMMIT# Exclude all hbase jars from linkis-public-enhancements
assembly
Add comprehensive exclusions for all hbase-related jars to prevent
Jetty class conflicts and reduce unnecessary dependencies.
Modified:
- linkis-public-enhancements/distribution.xml
* # AI COMMIT# Optimize linkis scripts - service alias and status output
format
## Changes
### 1. Service Alias Mapping (alias 1-6)
- alias [1] --> mg-eureka
- alias [2] --> mg-gateway
- alias [3] --> ps-publicservice
- alias [4] --> cg-linkismanager
- alias [5] --> cg-entrance
- alias [6] --> cg-engineconnmanager
### 2. Status Output Format
- Unified format: alias->[X] [service-name] [OK/FAILED]
- Service names left-aligned in 22-character width
- Green [OK] for running services
- Red [FAILED] for failed services
### 3. Files Modified
- linkis-dist/package/sbin/linkis
- linkis-dist/package/sbin/linkis-start-all.sh
### 4. Help Information
Updated help message to show new alias format
* #AI COMMIT# feat: Add build-time parameter for Python Module feature
toggle
- Add PYTHON_MODULE environment variable support in vue.config.js
- Create separate python-module-config virtual module to avoid circular
dependency
- Modify router.js to conditionally register pythonModule route
- Update index.vue to control menu visibility based on feature flag
- Default: enabled, use PYTHON_MODULE=false npm run build to disable
Co-Authored-By: Claude Opus 4.6 <[email protected]>
* #AI COMMIT# docs: Remove Python Module documentation files
These documentation files are not required by the project and can be
removed.
Co-Authored-By: Claude Opus 4.6 <[email protected]>
* #AI COMMIT# fix: Fix i18n key for add button in datasourceAccess module
- Change 'message.linkis.basedata.add' to
'message.linkis.basedataManagement.add'
- Keep consistent with other modules like datasourceEnv
- Fix Chinese translation not displaying for add button
Co-Authored-By: Claude Opus 4.6 <[email protected]>
* #AI COMMIT# feat: Add build-time parameter for disallow system user login
feature
Add compile-time toggle for disallow login feature, similar to python
module:
- Default enabled (feature ON)
- Use DISALLOW_LOGIN=false npm run build to disable
- Create virtual module disallow-login-config.js for config injection
Co-Authored-By: Claude Opus 4.6 <[email protected]>
---------
Co-authored-by: Claude Opus 4.6 <[email protected]>
---
linkis-dist/package/sbin/linkis | 192 +++++++++++----------
linkis-dist/package/sbin/linkis-start-all.sh | 22 ++-
linkis-engineconn-plugins/hive/pom.xml | 16 ++
.../hive/src/main/assembly/distribution.xml | 7 +
linkis-engineconn-plugins/jdbc/pom.xml | 9 +-
.../jdbc/src/main/assembly/distribution.xml | 9 +
.../AccessibleExecutorConfiguration.scala | 1 +
linkis-public-enhancements/distribution.xml | 22 +++
.../linkis-pes-publicservice/pom.xml | 8 +
.../config/GatewaySpringConfiguration.scala | 5 +-
linkis-web/PYTHON_MODULE_CHANGES.md | 122 -------------
linkis-web/PYTHON_MODULE_CONFIG.md | 95 ----------
.../apps/linkis/module/datasourceAccess/index.vue | 4 +-
linkis-web/src/apps/linkis/router.js | 18 +-
linkis-web/src/apps/linkis/view/linkis/index.vue | 23 ++-
linkis-web/src/dss/view/login/index.vue | 5 +-
linkis-web/vue.config.js | 17 +-
pom.xml | 8 +-
18 files changed, 235 insertions(+), 348 deletions(-)
diff --git a/linkis-dist/package/sbin/linkis b/linkis-dist/package/sbin/linkis
index 3719d7b5a7..1f76060f0e 100644
--- a/linkis-dist/package/sbin/linkis
+++ b/linkis-dist/package/sbin/linkis
@@ -34,14 +34,17 @@ if [ "$LINKIS_CONF_DIR" = "" ]; then
fi
source $LINKIS_CONF_DIR/linkis-env.sh
-export ENGINE_MANAGER=cg-engineconnmanager
-export ENTRANCE=cg-entrance
-export LINKISMANAGER=cg-linkismanager
-export GATEWAY=mg-gateway
export EUREKA=mg-eureka
-export PUBLICSERVICE=ps-publicservice
+export GATEWAY=mg-gateway
+export PUBLICSERVICE=ps-publicservice
+export LINKISMANAGER=cg-linkismanager
+export ENTRANCE=cg-entrance
+export ENGINE_MANAGER=cg-engineconnmanager
YELLOW='\033[0;33m'
+GREEN='\033[0;32m'
+RED='\033[0;31m'
+NC='\033[0m'
help() {
echo "<----------------------------------------------------------->"
@@ -70,12 +73,12 @@ help() {
echo " restart [service-name], restart [service-name] service"
echo ""
echo "SERVICE-NAME"
- echo " cg-engineconnmanager alias 1"
- echo " cg-entrance alias 2"
- echo " cg-linkismanager alias 3"
- echo " mg-eureka alias 4"
- echo " mg-gateway alias 5"
- echo " ps-publicservice alias 6"
+ echo " alias [1] --> mg-eureka"
+ echo " alias [2] --> mg-gateway"
+ echo " alias [3] --> ps-publicservice"
+ echo " alias [4] --> cg-linkismanager"
+ echo " alias [5] --> cg-entrance"
+ echo " alias [6] --> cg-engineconnmanager"
echo "<----------------------------------------------------------->"
exit 1
}
@@ -84,29 +87,32 @@ status(){
sh $LINKIS_HOME/sbin/linkis-daemon.sh status $1
}
-function checkServer() {
-echo -e "<-------------- ${YELLOW}Linkis-$1 ${NC} ------------------>"
-echo "Begin to check $1"
-sh $LINKIS_HOME/sbin/linkis-daemon.sh status $1
-if [ $? -ne 0 ]; then
- ALL_SERVER_NAME=linkis-$1
+function checkServer(){
+ local service_name=$1
+ local alias_num=$2
+ sh $LINKIS_HOME/sbin/linkis-daemon.sh status $service_name > /dev/null 2>&1
+ local status=$?
+ if [ $status -ne 0 ]; then
+ printf "${YELLOW}alias->[%d] [%-22s] [${RED}FAILED${NC}]${NC}\n"
"$alias_num" "$service_name"
+ ALL_SERVER_NAME=linkis-$service_name
LOG_PATH=$LINKIS_HOME/logs/$ALL_SERVER_NAME.log
echo "ERROR: your $ALL_SERVER_NAME microservice does not start
successful !!! ERROR logs as follows :"
echo "Please check detail log, log path :$LOG_PATH"
-else
- echo [OK]
+else
+ printf "${YELLOW}alias->[%d] [%-22s] [${GREEN}OK${NC}]${NC}\n"
"$alias_num" "$service_name"
+ sh $LINKIS_HOME/sbin/linkis-daemon.sh status $service_name
echo ""
echo ""
fi
}
status_all(){
- checkServer cg-engineconnmanager
- checkServer cg-entrance
- checkServer cg-linkismanager
- checkServer mg-gateway
- checkServer mg-eureka
- checkServer ps-publicservice
+ checkServer mg-eureka 1
+ checkServer mg-gateway 2
+ checkServer ps-publicservice 3
+ checkServer cg-linkismanager 4
+ checkServer cg-entrance 5
+ checkServer cg-engineconnmanager 6
}
stop(){
@@ -140,121 +146,121 @@ restart_all(){
case "$1" in
"start")
case "$2" in
- "$ENGINE_MANAGER" | 1)
- start $ENGINE_MANAGER
- ;;
- "$ENTRANCE" | 2)
- start $ENTRANCE
- ;;
- "$LINKISMANAGER" | 3)
- start $LINKISMANAGER
- ;;
- "$EUREKA" | 4)
+ "$EUREKA" | 1)
start $EUREKA
- ;;
- "$GATEWAY" | 5)
+ ;;
+ "$GATEWAY" | 2)
start $GATEWAY
- ;;
- "$PUBLICSERVICE" | 6)
+ ;;
+ "$PUBLICSERVICE" | 3)
start $PUBLICSERVICE
- ;;
+ ;;
+ "$LINKISMANAGER" | 4)
+ start $LINKISMANAGER
+ ;;
+ "$ENTRANCE" | 5)
+ start $ENTRANCE
+ ;;
+ "$ENGINE_MANAGER" | 6)
+ start $ENGINE_MANAGER
+ ;;
*)
if [ "$2" = "" ]; then
start_all
else
- echo "Please enter the correct service name"
- echo "Run help to view the service name"
+ echo "Please enter the correct service name"
+ echo "Run help to view the service name"
fi
;;
esac
;;
"stop")
case "$2" in
- "$ENGINE_MANAGER" | 1)
- stop $ENGINE_MANAGER
- ;;
- "$ENTRANCE" | 2)
- stop $ENTRANCE
- ;;
- "$LINKISMANAGER" | 3)
- stop $LINKISMANAGER
- ;;
- "$EUREKA" | 4)
+ "$EUREKA" | 1)
stop $EUREKA
- ;;
- "$GATEWAY" | 5)
+ ;;
+ "$GATEWAY" | 2)
stop $GATEWAY
- ;;
- "$PUBLICSERVICE" | 6)
+ ;;
+ "$PUBLICSERVICE" | 3)
stop $PUBLICSERVICE
- ;;
+ ;;
+ "$LINKISMANAGER" | 4)
+ stop $LINKISMANAGER
+ ;;
+ "$ENTRANCE" | 5)
+ stop $ENTRANCE
+ ;;
+ "$ENGINE_MANAGER" | 6)
+ stop $ENGINE_MANAGER
+ ;;
*)
if [ "$2" = "" ]; then
stop_all
else
- echo "Please enter the correct service name"
- echo "Run help to view the service name"
+ echo "Please enter the correct service name"
+ echo "Run help to view the service name"
fi
;;
esac
;;
"status")
case "$2" in
- "$ENGINE_MANAGER" | 1)
- status $ENGINE_MANAGER
- ;;
- "$ENTRANCE" | 2)
- status $ENTRANCE
- ;;
- "$LINKISMANAGER" | 3)
- status $LINKISMANAGER
- ;;
- "$EUREKA" | 4)
+ "$EUREKA" | 1)
status $EUREKA
- ;;
- "$GATEWAY" | 5)
+ ;;
+ "$GATEWAY" | 2)
status $GATEWAY
- ;;
- "$PUBLICSERVICE" | 6)
+ ;;
+ "$PUBLICSERVICE" | 3)
status $PUBLICSERVICE
- ;;
+ ;;
+ "$LINKISMANAGER" | 4)
+ status $LINKISMANAGER
+ ;;
+ "$ENTRANCE" | 5)
+ status $ENTRANCE
+ ;;
+ "$ENGINE_MANAGER" | 6)
+ status $ENGINE_MANAGER
+ ;;
*)
if [ "$2" = "" ]; then
status_all
else
- echo "Please enter the correct service name"
- echo "Run help to view the service name"
+ echo "Please enter the correct service name"
+ echo "Run help to view the service name"
fi
;;
esac
;;
"restart")
case "$2" in
- "$ENGINE_MANAGER" | 1)
- restart $ENGINE_MANAGER
- ;;
- "$ENTRANCE" | 2)
- restart $ENTRANCE
- ;;
- "$LINKISMANAGER" | 3)
- restart $LINKISMANAGER
- ;;
- "$EUREKA" | 4)
+ "$EUREKA" | 1)
restart $EUREKA
- ;;
- "$GATEWAY" | 5)
+ ;;
+ "$GATEWAY" | 2)
restart $GATEWAY
- ;;
- "$PUBLICSERVICE" | 6)
+ ;;
+ "$PUBLICSERVICE" | 3)
restart $PUBLICSERVICE
- ;;
+ ;;
+ "$LINKISMANAGER" | 4)
+ restart $LINKISMANAGER
+ ;;
+ "$ENTRANCE" | 5)
+ restart $ENTRANCE
+ ;;
+ "$ENGINE_MANAGER" | 6)
+ restart $ENGINE_MANAGER
+ ;;
*)
if [ "$2" = "" ]; then
stop_all
restart_all
else
- echo "Please enter the correct service name"
- echo "Run help to view the service name"
+ echo "Please enter the correct service name"
+ echo "Run help to view the service name"
fi
;;
esac
diff --git a/linkis-dist/package/sbin/linkis-start-all.sh
b/linkis-dist/package/sbin/linkis-start-all.sh
index d70b37d19d..5b9bf6edae 100644
--- a/linkis-dist/package/sbin/linkis-start-all.sh
+++ b/linkis-dist/package/sbin/linkis-start-all.sh
@@ -107,8 +107,16 @@ echo "start-all shell script executed completely"
echo "Start to check all linkis microservice"
function checkServer() {
+local service_name=$1
+local alias_num=$2
echo "<-------------------------------->"
-echo "Begin to check $SERVER_NAME"
+sh $LINKIS_HOME/sbin/linkis-daemon.sh status $SERVER_NAME
+local status=$?
+if [ $status -ne 0 ]; then
+ printf "alias->[%d] [%-22s] [FAILED]\n" "$alias_num" "$service_name"
+else
+ printf "alias->[%d] [%-22s] [OK]\n" "$alias_num" "$service_name"
+fi
SERVER_CHECK_CMD="sh $LINKIS_HOME/sbin/linkis-daemon.sh status $SERVER_NAME"
if test -z "$SERVER_IP"
then
@@ -136,34 +144,34 @@ sleep 3
if [ "$DISCOVERY" == "EUREKA" ]; then
export SERVER_NAME="mg-eureka"
SERVER_IP=$EUREKA_INSTALL_IP
- checkServer
+ checkServer mg-eureka 1
fi
#linkis-mg-gateway
SERVER_NAME="mg-gateway"
SERVER_IP=$GATEWAY_INSTALL_IP
-checkServer
+checkServer mg-gateway 2
#linkis-ps-publicservice
SERVER_NAME="ps-publicservice"
SERVER_IP=$PUBLICSERVICE_INSTALL_IP
-checkServer
+checkServer ps-publicservice 3
#linkis-cg-linkismanager
SERVER_NAME="cg-linkismanager"
SERVER_IP=$MANAGER_INSTALL_IP
-checkServer
+checkServer cg-linkismanager 4
#linkis-cg-entrance
SERVER_NAME="cg-entrance"
SERVER_IP=$ENTRANCE_INSTALL_IP
-checkServer
+checkServer cg-entrance 5
#linkis-cg-engineconnmanager(ecm)
SERVER_NAME="cg-engineconnmanager"
SERVER_IP=$ENGINECONNMANAGER_INSTALL_IP
-checkServer
+checkServer cg-engineconnmanager 6
echo "Apache Linkis started successfully"
diff --git a/linkis-engineconn-plugins/hive/pom.xml
b/linkis-engineconn-plugins/hive/pom.xml
index 30e5f7b411..4790f53648 100644
--- a/linkis-engineconn-plugins/hive/pom.xml
+++ b/linkis-engineconn-plugins/hive/pom.xml
@@ -106,6 +106,14 @@
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-slf4j-impl</artifactId>
</exclusion>
+ <exclusion>
+ <groupId>org.apache.hbase</groupId>
+ <artifactId>hbase-shaded-jetty</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>org.apache.hbase</groupId>
+ <artifactId>hbase-protocol-shaded</artifactId>
+ </exclusion>
</exclusions>
</dependency>
@@ -206,6 +214,14 @@
<groupId>org.apache.velocity</groupId>
<artifactId>velocity</artifactId>
</exclusion>
+ <exclusion>
+ <groupId>org.apache.hbase</groupId>
+ <artifactId>hbase-shaded-jetty</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>org.apache.hbase</groupId>
+ <artifactId>hbase-protocol-shaded</artifactId>
+ </exclusion>
</exclusions>
</dependency>
diff --git a/linkis-engineconn-plugins/hive/src/main/assembly/distribution.xml
b/linkis-engineconn-plugins/hive/src/main/assembly/distribution.xml
index aee427c61b..dead67c582 100644
--- a/linkis-engineconn-plugins/hive/src/main/assembly/distribution.xml
+++ b/linkis-engineconn-plugins/hive/src/main/assembly/distribution.xml
@@ -123,6 +123,13 @@
<exclude>org.apache.hadoop:hadoop-common:jar</exclude>
<exclude>org.apache.hadoop:hadoop-hdfs:jar</exclude>
<exclude>org.apache.htrace:htrace-core:jar</exclude>
+ <exclude>org.apache.hbase:hbase-shaded-jetty:jar</exclude>
+ <exclude>org.apache.hbase:hbase-shaded-jersey:jar</exclude>
+ <exclude>org.apache.hbase:hbase-shaded-gson:jar</exclude>
+ <exclude>org.apache.hbase:hbase-shaded-netty:jar</exclude>
+ <exclude>org.apache.hbase:hbase-shaded-protobuf:jar</exclude>
+
<exclude>org.apache.hbase:hbase-shaded-miscellaneous:jar</exclude>
+ <exclude>org.apache.hbase:hbase-protocol-shaded:jar</exclude>
<exclude>org.apache.logging.log4j:log4j-api:jar</exclude>
<exclude>org.apache.logging.log4j:log4j-core:jar</exclude>
<exclude>org.apache.logging.log4j:log4j-jul:jar</exclude>
diff --git a/linkis-engineconn-plugins/jdbc/pom.xml
b/linkis-engineconn-plugins/jdbc/pom.xml
index ebe9f4faf9..c96881e632 100644
--- a/linkis-engineconn-plugins/jdbc/pom.xml
+++ b/linkis-engineconn-plugins/jdbc/pom.xml
@@ -136,7 +136,14 @@
<groupId>org.xerial.snappy</groupId>
<artifactId>snappy-java</artifactId>
</exclusion>
-
+ <exclusion>
+ <groupId>org.apache.hbase</groupId>
+ <artifactId>hbase-shaded-jetty</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>org.apache.hbase</groupId>
+ <artifactId>hbase-protocol-shaded</artifactId>
+ </exclusion>
</exclusions>
</dependency>
diff --git a/linkis-engineconn-plugins/jdbc/src/main/assembly/distribution.xml
b/linkis-engineconn-plugins/jdbc/src/main/assembly/distribution.xml
index 47f1f7e222..8aadec99a3 100644
--- a/linkis-engineconn-plugins/jdbc/src/main/assembly/distribution.xml
+++ b/linkis-engineconn-plugins/jdbc/src/main/assembly/distribution.xml
@@ -37,6 +37,15 @@
<useStrictFiltering>false</useStrictFiltering>
<useTransitiveFiltering>true</useTransitiveFiltering>
+ <excludes>
+ <exclude>org.apache.hbase:hbase-shaded-jetty:jar</exclude>
+ <exclude>org.apache.hbase:hbase-shaded-jersey:jar</exclude>
+ <exclude>org.apache.hbase:hbase-shaded-gson:jar</exclude>
+ <exclude>org.apache.hbase:hbase-shaded-netty:jar</exclude>
+ <exclude>org.apache.hbase:hbase-shaded-protobuf:jar</exclude>
+
<exclude>org.apache.hbase:hbase-shaded-miscellaneous:jar</exclude>
+ <exclude>org.apache.hbase:hbase-protocol-shaded:jar</exclude>
+ </excludes>
</dependencySet>
</dependencySets>
diff --git
a/linkis-engineconn-plugins/shell/src/main/scala/org/apache/linkis/manager/engineplugin/shell/configuration/AccessibleExecutorConfiguration.scala
b/linkis-engineconn-plugins/shell/src/main/scala/org/apache/linkis/manager/engineplugin/shell/configuration/AccessibleExecutorConfiguration.scala
index 7693bc2a74..dd861f2c8d 100644
---
a/linkis-engineconn-plugins/shell/src/main/scala/org/apache/linkis/manager/engineplugin/shell/configuration/AccessibleExecutorConfiguration.scala
+++
b/linkis-engineconn-plugins/shell/src/main/scala/org/apache/linkis/manager/engineplugin/shell/configuration/AccessibleExecutorConfiguration.scala
@@ -36,6 +36,7 @@ import org.springframework.context.annotation.{Bean,
Configuration}
class AccessibleExecutorConfiguration extends Logging {
@Bean(Array("lockService"))
+ @ConditionalOnMissingBean
def createLockManager(): LockService = {
val lockService = new EngineConnConcurrentLockService
logger.info("use shell engine conn configuration to create concurrent
lockService")
diff --git a/linkis-public-enhancements/distribution.xml
b/linkis-public-enhancements/distribution.xml
index 58b75bf1d7..cb8e1920b5 100644
--- a/linkis-public-enhancements/distribution.xml
+++ b/linkis-public-enhancements/distribution.xml
@@ -154,6 +154,28 @@
<exclude>org.apache.hadoop:hadoop-common:jar</exclude>
<exclude>org.apache.hadoop:hadoop-hdfs:jar</exclude>
<exclude>org.apache.htrace:htrace-core:jar</exclude>
+ <exclude>org.apache.hbase:hbase-asyncfs:jar</exclude>
+ <exclude>org.apache.hbase:hbase-client:jar</exclude>
+ <exclude>org.apache.hbase:hbase-common:jar</exclude>
+ <exclude>org.apache.hbase:hbase-hadoop2-compat:jar</exclude>
+ <exclude>org.apache.hbase:hbase-hadoop-compat:jar</exclude>
+ <exclude>org.apache.hbase:hbase-http:jar</exclude>
+ <exclude>org.apache.hbase:hbase-logging:jar</exclude>
+ <exclude>org.apache.hbase:hbase-metrics:jar</exclude>
+ <exclude>org.apache.hbase:hbase-metrics-api:jar</exclude>
+ <exclude>org.apache.hbase:hbase-procedure:jar</exclude>
+ <exclude>org.apache.hbase:hbase-protocol:jar</exclude>
+ <exclude>org.apache.hbase:hbase-replication:jar</exclude>
+ <exclude>org.apache.hbase:hbase-server:jar</exclude>
+ <exclude>org.apache.hbase:hbase-shaded-gson:jar</exclude>
+ <exclude>org.apache.hbase:hbase-shaded-jersey:jar</exclude>
+ <exclude>org.apache.hbase:hbase-shaded-jetty:jar</exclude>
+
<exclude>org.apache.hbase:hbase-shaded-miscellaneous:jar</exclude>
+ <exclude>org.apache.hbase:hbase-shaded-netty:jar</exclude>
+ <exclude>org.apache.hbase:hbase-shaded-protobuf:jar</exclude>
+ <exclude>org.apache.hbase:hbase-unsafe:jar</exclude>
+ <exclude>org.apache.hbase:hbase-zookeeper:jar</exclude>
+ <exclude>org.apache.hbase:hbase-protocol-shaded:jar</exclude>
<exclude>org.apache.logging.log4j:log4j-api:jar</exclude>
<exclude>org.apache.logging.log4j:log4j-core:jar</exclude>
<exclude>org.apache.logging.log4j:log4j-jul:jar</exclude>
diff --git a/linkis-public-enhancements/linkis-pes-publicservice/pom.xml
b/linkis-public-enhancements/linkis-pes-publicservice/pom.xml
index 756127ef4b..aa232adeb2 100644
--- a/linkis-public-enhancements/linkis-pes-publicservice/pom.xml
+++ b/linkis-public-enhancements/linkis-pes-publicservice/pom.xml
@@ -98,6 +98,14 @@
<groupId>org.mortbay.jetty</groupId>
<artifactId>jetty</artifactId>
</exclusion>
+ <exclusion>
+ <groupId>org.apache.hbase</groupId>
+ <artifactId>hbase-shaded-jetty</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>org.apache.hbase</groupId>
+ <artifactId>hbase-protocol-shaded</artifactId>
+ </exclusion>
</exclusions>
</dependency>
diff --git
a/linkis-spring-cloud-services/linkis-service-gateway/linkis-gateway-core/src/main/scala/org/apache/linkis/gateway/config/GatewaySpringConfiguration.scala
b/linkis-spring-cloud-services/linkis-service-gateway/linkis-gateway-core/src/main/scala/org/apache/linkis/gateway/config/GatewaySpringConfiguration.scala
index 2c57084278..22b7d8acf7 100644
---
a/linkis-spring-cloud-services/linkis-service-gateway/linkis-gateway-core/src/main/scala/org/apache/linkis/gateway/config/GatewaySpringConfiguration.scala
+++
b/linkis-spring-cloud-services/linkis-service-gateway/linkis-gateway-core/src/main/scala/org/apache/linkis/gateway/config/GatewaySpringConfiguration.scala
@@ -40,11 +40,15 @@ import java.util.stream.Collectors
@Configuration
class GatewaySpringConfiguration {
+ @Autowired
+ private var userRestful: UserRestful = _
+
@Autowired
private var tokenService: TokenService = _
@PostConstruct
def init(): Unit = {
+ SecurityFilter.setUserRestful(userRestful)
TokenAuthentication.setTokenService(tokenService)
}
@@ -54,7 +58,6 @@ class GatewaySpringConfiguration {
def createUserRestful(securityHooks: Array[SecurityHook]): UserRestful = {
val userRestful = new LDAPUserRestful
if (securityHooks != null) userRestful.setSecurityHooks(securityHooks)
- SecurityFilter.setUserRestful(userRestful)
userRestful
}
diff --git a/linkis-web/PYTHON_MODULE_CHANGES.md
b/linkis-web/PYTHON_MODULE_CHANGES.md
deleted file mode 100644
index c5389aacd8..0000000000
--- a/linkis-web/PYTHON_MODULE_CHANGES.md
+++ /dev/null
@@ -1,122 +0,0 @@
-# Python Module Feature Toggle - Implementation Summary
-
-## Changes Made
-
-### 1. Environment Variable Configuration
-**File**: `.env`
-- Added `VUE_APP_ENABLE_PYTHON_MODULE=false` (default disabled)
-- This controls whether the Python Module feature is available
-
-### 2. Router Configuration
-**File**: `src/apps/linkis/router.js`
-
-**Changes**:
-- Added environment variable check: `export const isPythonModuleEnabled =
process.env.VUE_APP_ENABLE_PYTHON_MODULE === 'true'`
-- Modified pythonModule route to be conditionally loaded:
- ```javascript
- ...(isPythonModuleEnabled ? [{
- name: 'pythonModule',
- path: 'pythonModule',
- component: () => import('./module/pythonModule/index.vue'),
- meta: {
- title: 'pythonModule',
- publicPage: true,
- },
- }] : []),
- ```
-
-### 3. View Component Updates
-**File**: `src/apps/linkis/view/linkis/index.vue`
-
-**Changes**:
-- Imported `isPythonModuleEnabled` from router
-- Added to component data: `isPythonModuleEnabled: isPythonModuleEnabled`
-- Modified sidebar menu visibility condition to hide Python Module when
disabled:
- ```javascript
- v-if="(!isLogAdmin? ...) && (item.key !== '1-13' || isPythonModuleEnabled)"
- ```
-- Updated default redirect logic in `mounted()`:
- ```javascript
- if(!localStorage.getItem('hasRead')) {
- if (isPythonModuleEnabled) {
- this.clickToRoute('1-13-1') // Python Module
- } else {
- this.clickToRoute('1-1') // Global History
- }
- }
- ```
-
-## Feature Behavior
-
-### When VUE_APP_ENABLE_PYTHON_MODULE=false (Default)
-✅ **Recommended for users without WeBank npm registry access**
-
-- Python Module route is NOT registered
-- Python Module menu item is HIDDEN from sidebar
-- After login, users are redirected to **Global History** page
-- Accessing `/console/pythonModule` directly will show 404 error
-- No dependency on internal `@webank` packages required
-
-### When VUE_APP_ENABLE_PYTHON_MODULE=true
-⚠️ **Requires WeBank internal npm registry access**
-
-- Python Module route is registered
-- Python Module menu item is VISIBLE in sidebar
-- After login, users are redirected to **Python Module** page (if first time)
-- Accessing `/console/pythonModule` directly works normally
-- Requires successful build of PythonModule sub-application
-
-## Testing
-
-To test the feature toggle:
-
-### Test 1: Disabled State (Default)
-```bash
-# 1. Ensure .env has VUE_APP_ENABLE_PYTHON_MODULE=false
-cat linkis-web/.env | grep VUE_APP_ENABLE_PYTHON_MODULE
-
-# 2. Rebuild
-cd linkis-web
-npm run build
-
-# 3. Verify behavior:
-# - Python Module menu should NOT appear in sidebar
-# - Login should redirect to Global History
-# - /console/pythonModule should return 404
-```
-
-### Test 2: Enabled State
-```bash
-# 1. Update .env
-echo "VUE_APP_ENABLE_PYTHON_MODULE=true" >> linkis-web/.env
-
-# 2. Rebuild
-cd linkis-web
-npm run build
-
-# 3. Verify behavior:
-# - Python Module menu should appear in sidebar
-# - Login should redirect to Python Module
-# - /console/pythonModule should work (if built)
-```
-
-## Migration Notes
-
-- **Backward Compatibility**: Default is `false`, so existing deployments
won't be affected
-- **No Breaking Changes**: All other features remain unchanged
-- **Easy Rollback**: Simply set `VUE_APP_ENABLE_PYTHON_MODULE=false` and
rebuild
-
-## Documentation
-
-- Detailed configuration guide: `PYTHON_MODULE_CONFIG.md`
-- This summary document: `PYTHON_MODULE_CHANGES.md`
-
-## Next Steps
-
-For users who want to enable Python Module:
-1. Obtain access to WeBank internal npm registry
-2. Configure `.npmrc` with registry credentials
-3. Set `VUE_APP_ENABLE_PYTHON_MODULE=true` in `.env`
-4. Run `npm run installAll` to install all dependencies
-5. Run `npm run buildSubModule` to build Python Module
-6. Run `npm run build` to build main application
diff --git a/linkis-web/PYTHON_MODULE_CONFIG.md
b/linkis-web/PYTHON_MODULE_CONFIG.md
deleted file mode 100644
index 6ca023b8b4..0000000000
--- a/linkis-web/PYTHON_MODULE_CONFIG.md
+++ /dev/null
@@ -1,95 +0,0 @@
-# Python Module Feature Configuration
-
-## Overview
-
-The Python Module feature can be enabled or disabled via environment variable
configuration. This feature depends on internal WeBank npm packages
(`@webank/fes-design-material`, `@webank/letgo-components`) which are not
publicly available.
-
-## Configuration
-
-### Environment Variable
-
-Edit the `.env` file in the `linkis-web` root directory:
-
-```bash
-# Enable or disable Python Module feature (true/false)
-# Set to false if you cannot access @webank internal npm packages
-VUE_APP_ENABLE_PYTHON_MODULE=false
-```
-
-### Options
-
-- `VUE_APP_ENABLE_PYTHON_MODULE=true`: Enable Python Module feature
- - The Python Module menu item will be displayed in the sidebar
- - After login, users will be redirected to the Python Module page
- - Requires access to WeBank internal npm registry to build
-
-- `VUE_APP_ENABLE_PYTHON_MODULE=false`: Disable Python Module feature (Default)
- - The Python Module menu item will be hidden from the sidebar
- - After login, users will be redirected to the Global History page
- - No special npm registry access required
-
-## Implementation Details
-
-### Modified Files
-
-1. **`.env`**: Added `VUE_APP_ENABLE_PYTHON_MODULE` environment variable
-2. **`src/apps/linkis/router.js`**:
- - Added `isPythonModuleEnabled` constant
- - Conditionally load pythonModule route
-3. **`src/apps/linkis/view/linkis/index.vue`**:
- - Import `isPythonModuleEnabled` from router
- - Conditionally display pythonModule in sidebar menu
- - Modified default redirect logic based on feature flag
-
-### Behavior
-
-When `VUE_APP_ENABLE_PYTHON_MODULE=false`:
-- ❌ Python Module route is not registered
-- ❌ Python Module menu item is hidden
-- ✅ Users are redirected to Global History page after login
-- ✅ Direct access to `/console/pythonModule` will show 404
-
-When `VUE_APP_ENABLE_PYTHON_MODULE=true`:
-- ✅ Python Module route is registered
-- ✅ Python Module menu item is visible
-- ✅ Users are redirected to Python Module page after login (if not `hasRead`)
-- ✅ Direct access to `/console/pythonModule` works
-
-## Building
-
-After changing the environment variable:
-
-```bash
-# Rebuild the project
-cd linkis-web
-npm run build
-```
-
-## For Internal Users
-
-If you have access to WeBank's internal npm registry:
-
-1. Set `VUE_APP_ENABLE_PYTHON_MODULE=true` in `.env`
-2. Configure npm registry (contact your administrator for registry URL)
-3. Install dependencies: `npm run installAll`
-4. Build PythonModule: `npm run buildSubModule`
-5. Build main application: `npm run build`
-
-## Troubleshooting
-
-### Issue: 404 Error when accessing Python Module
-
-**Solution**: Check that `VUE_APP_ENABLE_PYTHON_MODULE=true` and rebuild the
application
-
-### Issue: Python Module menu not showing
-
-**Solution**:
-1. Verify `.env` has `VUE_APP_ENABLE_PYTHON_MODULE=true`
-2. Clear browser cache
-3. Rebuild: `npm run build`
-
-### Issue: Cannot install dependencies for PythonModule
-
-**Solution**:
-1. Set `VUE_APP_ENABLE_PYTHON_MODULE=false` to disable the feature
-2. Or configure access to WeBank internal npm registry
diff --git a/linkis-web/src/apps/linkis/module/datasourceAccess/index.vue
b/linkis-web/src/apps/linkis/module/datasourceAccess/index.vue
index f0fda1cb48..1622626504 100644
--- a/linkis-web/src/apps/linkis/module/datasourceAccess/index.vue
+++ b/linkis-web/src/apps/linkis/module/datasourceAccess/index.vue
@@ -27,7 +27,7 @@
}}
</Button>
<Button type="success" class="Button" style="margin-left: 10px"
@click="onAdd()">{{
- $t('message.linkis.basedata.add')
+ $t('message.linkis.basedataManagement.add')
}}
</Button>
</Col>
@@ -77,7 +77,7 @@
width="800"
class="modal"
v-model="modalShow"
- :title="modalAddMode=='add' ? $t('message.linkis.basedata.add') :
$t('message.linkis.basedata.edit')"
+ :title="modalAddMode=='add' ?
$t('message.linkis.basedataManagement.add') :
$t('message.linkis.basedata.edit')"
:loading="modalLoading"
>
<div slot="footer">
diff --git a/linkis-web/src/apps/linkis/router.js
b/linkis-web/src/apps/linkis/router.js
index 0f63d27828..3c93555150 100644
--- a/linkis-web/src/apps/linkis/router.js
+++ b/linkis-web/src/apps/linkis/router.js
@@ -15,6 +15,9 @@
* limitations under the License.
*/
+// Import from a separate module to avoid circular dependency with
dynamic-modules
+import pythonModuleConfig from 'python-module-config'
+
export const subAppRoutes = {
path: '',
name: 'layout',
@@ -27,8 +30,9 @@ export const subAppRoutes = {
children: []
}
-// Check if Python Module is enabled via environment variable
-export const isPythonModuleEnabled = process.env.VUE_APP_ENABLE_PYTHON_MODULE
=== 'true'
+// Check if Python Module is enabled via build-time parameter
+// Default: enabled, use PYTHON_MODULE=false to disable
+export const isPythonModuleEnabled = pythonModuleConfig.enablePythonModule
export default [
{
@@ -281,16 +285,6 @@ export default [
publicPage: true,
},
}] : []),
- {
- name: 'pythonModule',
- path: 'pythonModule',
- component: () =>
- import('./module/pythonModule/index.vue'),
- meta: {
- title: 'pythonModule',
- publicPage: true,
- },
- },
{
name: 'datasourceAccess',
path: 'datasourceAccess',
diff --git a/linkis-web/src/apps/linkis/view/linkis/index.vue
b/linkis-web/src/apps/linkis/view/linkis/index.vue
index e96bf1d0f8..ffb91656a3 100644
--- a/linkis-web/src/apps/linkis/view/linkis/index.vue
+++ b/linkis-web/src/apps/linkis/view/linkis/index.vue
@@ -30,17 +30,17 @@
<CellGroup v-for="(item, index2) in sideNavList.children"
:key="index2"
@on-click="handleCellClick">
<Cell
- v-if="!isLogAdmin? (item.path !=='/console/ECM')&&(item.path
!=='/console/microService')&&(item.key !== '1-12'):true"
+ v-if="(item.key !== '1-13' || isPythonModuleEnabled) &&
(!isLogAdmin? (item.path !=='/console/ECM')&&(item.path
!=='/console/microService')&&(item.key !== '1-12'):true)"
:key="index2" :class="{ crrentItem: crrentItem === item.key }"
:title="item.name"
:name="item.key">
<div>
<span>{{item.name}}</span>
<div class="sub-menu-row">
<Icon
- v-show="item.showSubMenu && (item.key === '1-8' ||
item.key === '1-9' || item.key === '1-10' || item.key === '1-12' || item.key
=== '1-13')"
+ v-show="item.showSubMenu && (item.key === '1-8' ||
item.key === '1-9' || item.key === '1-10' || item.key === '1-12' || (item.key
=== '1-13' && isPythonModuleEnabled))"
type="ios-arrow-down" class="user-icon" />
<Icon
- v-show="!item.showSubMenu && (item.key === '1-8' ||
item.key === '1-9' || item.key === '1-10' || item.key === '1-12' || item.key
=== '1-13')"
+ v-show="!item.showSubMenu && (item.key === '1-8' ||
item.key === '1-9' || item.key === '1-10' || item.key === '1-12' || (item.key
=== '1-13' && isPythonModuleEnabled))"
type="ios-arrow-up" class="user-icon" />
</div>
</div>
@@ -51,7 +51,7 @@
v-for="(item3, index3) in getChildMap(item.key).children"
:key="index3" @on-click="clickToRoute">
<div
- v-if="isLogAdmin ? true : ['1-8-1', '1-9-2', '1-9-1',
'1-10-7', '1-13-1'].includes(item3.key)">
+ v-if="(item.key !== '1-13' || isPythonModuleEnabled)
&& (isLogAdmin ? true : ['1-8-1', '1-9-2', '1-9-1',
'1-10-7'].includes(item3.key))">
<Cell :key="index3" :class="{ crrentItem: crrentItem
=== item3.key }"
:title="item3.name" :name="item3.key" />
</div>
@@ -116,6 +116,7 @@
<script>
import storage from '@/common/helper/storage'
import api from '@/common/service/api'
+import { isPythonModuleEnabled } from '../../router'
export default {
name: 'Layout',
mounted() {
@@ -128,9 +129,12 @@ export default {
}
})
if(!localStorage.getItem('hasRead')) {
- this.clickToRoute('1-13-1')
- // this.crrentItem = '1-13-1'
- // this.$router.push({path: '/console/pythonModule'})
+ // Redirect based on pythonModule feature toggle
+ if (isPythonModuleEnabled) {
+ this.clickToRoute('1-13-1')
+ } else {
+ this.clickToRoute('1-1')
+ }
}
},
unmounted() {
@@ -147,6 +151,7 @@ export default {
return {
crrentItem: '1-1',
isLogAdmin: false,
+ isPythonModuleEnabled: isPythonModuleEnabled,
sideNavList: {
key: '1',
name: this.$t('message.linkis.sideNavList.function.name'),
@@ -596,7 +601,9 @@ export default {
})
next((vm) => {
- const noAccess = !isLogAdmin && !['1-1', '1-2', '1-3', '1-4',
'1-8-1', '1-9-1', '1-9-2', '1-10-7', '1-11'].includes(lastActiveConsole?.key)
+ // Check if pythonModule is disabled and lastActiveConsole was
pythonModule
+ const pythonModuleDisabled = !isPythonModuleEnabled &&
lastActiveConsole?.key === '1-13-1'
+ const noAccess = pythonModuleDisabled || (!isLogAdmin && !['1-1',
'1-2', '1-3', '1-4', '1-8-1', '1-9-1', '1-9-2', '1-10-7',
'1-11'].includes(lastActiveConsole?.key))
if (lastActiveConsole && !noAccess ) {
if (
lastActiveConsole?.key === '1-9-1' ||
diff --git a/linkis-web/src/dss/view/login/index.vue
b/linkis-web/src/dss/view/login/index.vue
index 1be75fc68e..775e6dfae3 100644
--- a/linkis-web/src/dss/view/login/index.vue
+++ b/linkis-web/src/dss/view/login/index.vue
@@ -75,9 +75,10 @@ import { db } from '@/common/service/db/index.js';
import { config } from '@/common/config/db.js';
import JSEncrypt from 'jsencrypt';
import tab from '@/apps/scriptis/service/db/tab.js';
+import disallowLoginConfig from 'disallow-login-config';
-const DISALLOW_LOGIN = process.env.VUE_APP_DISALLOW_LOGIN === 'true'
-const DISALLOW_LOGIN_PREFIX = (process.env.VUE_APP_DISALLOW_LOGIN_PREFIX ||
'').split(',').filter(Boolean).map(v=>{
+const DISALLOW_LOGIN = disallowLoginConfig.enableDisallowLogin
+const DISALLOW_LOGIN_PREFIX = (disallowLoginConfig.disallowLoginPrefix ||
'').split(',').filter(Boolean).map(v=>{
return new RegExp(`^${v}`)
});
export default {
diff --git a/linkis-web/vue.config.js b/linkis-web/vue.config.js
index 3f71e18303..9ce50a416c 100644
--- a/linkis-web/vue.config.js
+++ b/linkis-web/vue.config.js
@@ -31,6 +31,13 @@ const getVersion = () => {
// 指定module打包, 不指定则打包全部子应用
// npm run serve --module=scriptis
let modules = process.env.npm_config_module || ''
+// python_module feature toggle: default enabled, use PYTHON_MODULE=false to
disable
+// Usage: PYTHON_MODULE=false npm run build
+// Note: npm 7+ converts npm_config_python_module to npm_config_python-module
+const enablePythonModule = process.env.PYTHON_MODULE !== 'false' &&
process.env.npm_config_python_module !== 'false' &&
process.env.npm_config_python_module !== 'false'
+// disallow_login feature toggle: default enabled, use DISALLOW_LOGIN=false to
disable
+// Usage: DISALLOW_LOGIN=false npm run build
+const enableDisallowLogin = process.env.DISALLOW_LOGIN !== 'false' &&
process.env.npm_config_disallow_login !== 'false' &&
process.env.npm_config_disallow_login !== 'false'
if (modules) {
modules = modules.split(',')
Object.keys(apps).forEach(m => {
@@ -81,7 +88,15 @@ const virtualModules = new VirtualModulesPlugin({
requireComponent: [${requireComponent.join(',')}],
requireComponentVue: [${requireComponentVue.join(',')}],
microModule: ${JSON.stringify(process.env.npm_config_micro_module) ||
false},
- headers:{${headers.join(',')}}
+ headers:{${headers.join(',')}},
+ enablePythonModule: ${enablePythonModule}
+ };`,
+ 'node_modules/python-module-config.js': `module.exports = {
+ enablePythonModule: ${enablePythonModule}
+ };`,
+ 'node_modules/disallow-login-config.js': `module.exports = {
+ enableDisallowLogin: ${enableDisallowLogin},
+ disallowLoginPrefix:
${JSON.stringify(process.env.VUE_APP_DISALLOW_LOGIN_PREFIX ||
'hduser,shduser,hadoop')}
};`
});
diff --git a/pom.xml b/pom.xml
index 427100d0e9..f28924eb4c 100644
--- a/pom.xml
+++ b/pom.xml
@@ -102,7 +102,7 @@
</snapshotRepository>
</distributionManagement>
<properties>
- <revision>1.8.0</revision>
+ <revision>1.9.0</revision>
<jedis.version>2.9.2</jedis.version>
<spark.version>2.4.3</spark.version>
<hadoop.version>2.7.2</hadoop.version>
@@ -1595,7 +1595,7 @@
<profile>
<id>spark-3</id>
<properties>
- <revision>1.8.0-spark3</revision>
+ <revision>1.9.0-spark3</revision>
<json4s.version>3.7.0-M11</json4s.version>
<spark.version>3.4.4</spark.version>
<scala.version>2.12.17</scala.version>
@@ -1612,7 +1612,7 @@
<id>apache</id>
<properties>
<!-- Core Version -->
- <revision>1.8.0</revision>
+ <revision>1.9.0</revision>
<!-- Hadoop Ecosystem -->
<hadoop.version>3.3.4</hadoop.version>
@@ -1702,7 +1702,7 @@
<!-- Other -->
<poi.version>5.3.0</poi.version>
- <jline.version>3.9.0</jline.version>
+ <jline.version>2.14.6</jline.version>
<woodstox.version>6.4.0</woodstox.version>
<sparkmeasure.version>0.24</sparkmeasure.version>
<flink.version>1.16.2</flink.version>
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]