This is an automated email from the ASF dual-hosted git repository.
gaojun2048 pushed a commit to branch add_canvas_job_define
in repository https://gitbox.apache.org/repos/asf/incubator-seatunnel-web.git
The following commit(s) were added to refs/heads/add_canvas_job_define by this
push:
new bc6d4af0 [Sync] Sync main branch to add_canvas_job_define branch (#52)
bc6d4af0 is described below
commit bc6d4af0df0b3a42dfd6563160d8920a5013e083
Author: Eric <[email protected]>
AuthorDate: Wed May 10 16:19:22 2023 +0800
[Sync] Sync main branch to add_canvas_job_define branch (#52)
* [Doc&Web] Improve readme add how to start seatunnel web (#51)
* Improve the readme
* Make support deploy by installer package
* [Feat][UI] Add component of dynamic form in this project.
* [Feat][UI] Add chinese locale in the project.
* [Fix][UI] Fix the problem that the fillet is reset after refreshing.
---------
Co-authored-by: songjianet <[email protected]>
---
.gitignore | 4 +
README.md | 158 +++++++++++++--------
build.sh | 2 +-
docs/images/application_config.png | Bin 0 -> 392200 bytes
docs/images/ds_create_project.png | Bin 0 -> 202373 bytes
docs/images/ds_create_tenant.png | Bin 0 -> 267768 bytes
docs/images/ds_create_token.png | Bin 0 -> 268746 bytes
docs/images/ds_create_user.png | Bin 0 -> 294395 bytes
seatunnel-server/seatunnel-app/pom.xml | 87 +++++++++---
.../{seatunnel-web.xml => seatunnel-web-ci.xml} | 26 +++-
.../src/main/assembly/seatunnel-web.xml | 12 +-
.../seatunnel/app/adapter/SeatunnelWebAdapter.java | 57 ++++++--
.../seatunnel/app/controller/AuthController.java | 2 +-
.../seatunnel/app/controller/ScriptController.java | 2 +-
.../seatunnel/app/controller/TaskController.java | 2 +-
.../seatunnel/app/controller/UserController.java | 2 +-
.../app/interceptor/AuthenticationInterceptor.java | 20 ++-
.../src/main/resources/application.yml | 8 +-
.../main/resources/script/seatunnel_server_env.sh | 8 +-
.../main/resources/script/seatunnel_server_h2.sql | 2 +
.../resources/script/seatunnel_server_mysql.sql | 2 +
seatunnel-ui/src/router/index.ts | 4 +-
seatunnel-ui/src/router/routes.ts | 6 +-
seatunnel-ui/src/service/service.ts | 2 +-
seatunnel-ui/vite.config.ts | 3 +-
25 files changed, 289 insertions(+), 120 deletions(-)
diff --git a/.gitignore b/.gitignore
index 1197e9bd..9bf8b904 100644
--- a/.gitignore
+++ b/.gitignore
@@ -48,3 +48,7 @@ test.conf
spark-warehouse
*.flattened-pom.xml
/seatunnel-ui/package-lock.json
+/seatunnel-ui/node
+/seatunnel-ui/node/*
+/seatunnel-ui/node_modules
+/seatunnel-ui/node_modules/*
diff --git a/README.md b/README.md
index 30444830..822472d8 100644
--- a/README.md
+++ b/README.md
@@ -21,90 +21,128 @@ Click it if your want to know more about our design.
👉🏻[Design](https://gi
## How to start
-First, we need clone this project from Github.
+### 1 Preparing the Apache DolphinScheduler environment
-```shell
-git clone https://github.com/apache/incubator-seatunnel-web.git
-```
+#### 1.1 Install Apache DolphinScheduler
+
+If you already have Apache DolphinScheduler environment, you can skip this
step and go to [Create Tenant and User for SeaTunnel Web](#1.2 Create Tenant
and User for SeaTunnel Web)
+
+Because running SeaTunnel Web must rely on the DolphinScheduler, if you do not
have a DS environment, you need to first install and deploy a DolphinScheduler
(hereinafter referred to as DS). Taking DS version 3.1.5 as an example.
+
+Reference
`https://dolphinscheduler.apache.org/zh-cn/docs/3.1.5/guide/installation/standalone`
to install a standalone DS.
+
+#### 1.2 Create Tenant and User for SeaTunnel Web
+
+If you already have a DS environment and decide to use existing users and
tenants for SeaTunnel Web, you can skip this step and go to [Create Project for
SeaTunnel Web](#1.3 Create Project for SeaTunnel Web).
+
+Because SeaTunnel Web needs to call the interface of DS to create workflows
and tasks, it is necessary to submit the projects, users, and tenants created
in DS for SeaTunnel to use.
+
+1. Create Tenant
+
+"Security" -> "Tenant Manage" -> "Create Tenant"
+
+
+
+2. For simplicity, use the default user admin of DS directly here
+
+#### 1.3 Create Project for SeaTunnel Web
+
+
+
+#### 1.4 Create Token for SeaTunnel Web
+
+
+
+### 2 Run SeaTunnel Web in IDEA
+
+If you want to deploy and run SeaTunnel Web, Please turn to [3 Run SeaTunnel
Web In Server](#3 Run SeaTunnel Web In Server)
+
+#### 2.1 Init database
+
+1. Edit
`whaletunnel-server/whaletunnel-app/src/main/resources/script/seatunnel_server_env.sh`
file, Complete the installed database address, port, username, and password.
Here is an example:
+
+ ```
+ export HOSTNAME="localhost"
+ export PORT="3306"
+ export USERNAME="root"
+ export PASSWORD="123456"
+ ```
+2. Run init shell `sh
seatunnel-server/seatunnel-app/src/main/resources/script/init_sql.sh` If there
are no errors during operation, it indicates successful initialization.
+
+#### 2.2 Config application and Run SeaTunnel Web Backend Server
+
+1. Edit `seatunnel-server/seatunnel-app/src/main/resources/application.yml`
Fill in the database connection information and DS interface related
information in the file.
+
+
+
+2. Run
`seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/SeatunnelApplication.java`
If there are no errors reported, the seatunnel web backend service is
successfully started.
+
+#### 2.3 Run SeaTunnel Web Front End
-Then, setup up configuration of db and more.
-```shell
-vim seatunnel-server/seatunnel-app/src/main/resources/application.yml
```
+cd seatunnel-ui
+npm install
+npm run dev
-Notice:
-At present, we only support the following scheduler systems: dolphinscheduler,
more scheduler systems will be supported in the future;
-And for easier use, we plan to build our own scheduling system in Seatunnel.
-
-Here is a sample parameter configuration for Seatunnel integration
dolphinscheduler:
-```yaml
-ds:
- script:
- # The path where the script is stored
- dir: /dj
- project:
- # The default project name of dolphinscheduler
- default: test_dj
- tenant:
- # Which tenant been used to submit script
- default: default
- api:
- # The dolphinscheduler user token
- token: 12345678
- # The dolphinscheduler api prefix address
- prefix: http://127.0.0.1:12345/dolphinscheduler
```
-Now comes the crucial part, this is about your account security, please modify
the Jwt secret key and algorithm.
+If there are no issues with the operation, the following information will be
displayed:
-```yaml
-jwt:
- expireTime: 86400
- secretKey: https://github.com/apache/incubator-seatunnel
- algorithm: HS256
```
+ ➜ Local: http://127.0.0.1:5173/
+ ➜ Network: use --host to expose
+ ➜ press h to show help
-
-Next, execute sql to create table .(Your must create database first by
yourself)
-```shell
-# Replace `username` & `dbName` with the real username and database name.
-# We will provided script in future.
-mysql -u username -p [dbName] < bin/seatunnl.sql
```
-Now, you've done all the preparatory work, launch our app.
+Accessing in a browser http://127.0.0.1:5173/login Okay, the default username
and password are admin/admin.
-### Launch it in IntelliJ IDEA
+### 3 Run SeaTunnel Web In Server
-Starting the back end of St in idea is really simple, just run the main method
of `SeatunnelApplication.java` in the `seatunnel-app` module.
-And the log will tell u anything you need to know.
+#### 3.1 Build Install Package From Code
-### Start it in the command line
+```
+cd incubator-seatunnel-web
+sh build.sh code
+```
-```shell
-# start backend
+Then you can find the installer package in dir
`incubator-seatunnel-web/seatunnel-server/seatunnel-app/target/apache-seatunnel-web-incubating-${project.version}.tar.gz`.
-# for build code
-sh build.sh code
+#### 3.2 Install
-# for build image
-sh build.sh image
-
-# and then start docker container
-docker run apache/seatunnel-web
+Copy the `apache-seatunnel-web-incubating-${project.version}.tar.gz` to your
server node and unzip it.
+```shell
+tar -zxvf apache-seatunnel-web-incubating-${project.version}.tar.gz
```
-### start frontend
-You can use a Web server such as Apache HTTP Server or Nginx to start
front-end applications. Deploy the built front-end code to the root directory
of the Web server, start the Web server, and enter the URL of the Web server in
a browser to access the application.
+#### 3.3 Init database
+
+1. Edit
`apache-seatunnel-web-incubating-${project.version}/script/seatunnel_server_env.sh`
file, Complete the installed database address, port, username, and password.
Here is an example:
+
+ ```
+ export HOSTNAME="localhost"
+ export PORT="3306"
+ export USERNAME="root"
+ export PASSWORD="123456"
+ ```
+2. Run init shell `sh
apache-seatunnel-web-incubating-${project.version}/script/init_sql.sh` If there
are no errors during operation, it indicates successful initialization.
+
+#### 3.4 Config application and Run SeaTunnel Web Backend Server
+
+Edit
`apache-seatunnel-web-incubating-${project.version}/config/application.yml`
Fill in the database connection information and DS interface related
information in the file.
+
+
+
+#### 3.5 Start SeaTunnel Web
-If you want start in dev mode:
```shell
-cd seatunnel-ui
-npm install
-npm run dev
+cd apache-seatunnel-web-incubating-${project.version}
+sh bin/seatunnel-backend-daemon.sh start
```
+Accessing in a browser http://127.0.0.1:8801/ui/ Okay, the default username
and password are admin/admin.
+
### How to use it
After all the pre-work is done, we can open the following URL:
127.0.0.1:7890(please replace it according to your configuration) to use it.
diff --git a/build.sh b/build.sh
index d48afbf4..6ce3ed7f 100644
--- a/build.sh
+++ b/build.sh
@@ -29,7 +29,7 @@ DOCKER_VERSION=1.0.0-snapshot
code() {
/bin/sh $WORKDIR/mvnw clean package -DskipTests
# mv release zip
- mv $WORKDIR/seatunnel-server/seatunnel-app/target/seatunnel-web.zip $WORKDIR/
+ mv
$WORKDIR/seatunnel-server/seatunnel-app/target/apache-seatunnel-web-incubating-1.0.0-SNAPSHOT.zip
$WORKDIR/
}
# build image
diff --git a/docs/images/application_config.png
b/docs/images/application_config.png
new file mode 100644
index 00000000..eac17bae
Binary files /dev/null and b/docs/images/application_config.png differ
diff --git a/docs/images/ds_create_project.png
b/docs/images/ds_create_project.png
new file mode 100644
index 00000000..71bb2516
Binary files /dev/null and b/docs/images/ds_create_project.png differ
diff --git a/docs/images/ds_create_tenant.png b/docs/images/ds_create_tenant.png
new file mode 100644
index 00000000..45dfe336
Binary files /dev/null and b/docs/images/ds_create_tenant.png differ
diff --git a/docs/images/ds_create_token.png b/docs/images/ds_create_token.png
new file mode 100644
index 00000000..539c0bdf
Binary files /dev/null and b/docs/images/ds_create_token.png differ
diff --git a/docs/images/ds_create_user.png b/docs/images/ds_create_user.png
new file mode 100644
index 00000000..5117f398
Binary files /dev/null and b/docs/images/ds_create_user.png differ
diff --git a/seatunnel-server/seatunnel-app/pom.xml
b/seatunnel-server/seatunnel-app/pom.xml
index aef91185..aa41a158 100644
--- a/seatunnel-server/seatunnel-app/pom.xml
+++ b/seatunnel-server/seatunnel-app/pom.xml
@@ -246,26 +246,73 @@
</execution>
</executions>
</plugin>
-
- <plugin>
- <artifactId>maven-assembly-plugin</artifactId>
- <executions>
- <execution>
- <id>seatunnel-web</id>
- <goals>
- <goal>single</goal>
- </goals>
- <phase>package</phase>
- <configuration>
- <finalName>seatunnel-web</finalName>
- <descriptors>
-
<descriptor>src/main/assembly/seatunnel-web.xml</descriptor>
- </descriptors>
- <appendAssemblyId>false</appendAssemblyId>
- </configuration>
- </execution>
- </executions>
- </plugin>
</plugins>
</build>
+ <profiles>
+ <profile>
+ <id>release</id>
+ <activation>
+ <property>
+ <name>release</name>
+ <value>true</value>
+ </property>
+ </activation>
+ <build>
+
<finalName>apache-seatunnel-web-incubating-${project.version}</finalName>
+ <plugins>
+ <plugin>
+ <artifactId>maven-assembly-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>seatunnel-web</id>
+ <goals>
+ <goal>single</goal>
+ </goals>
+ <phase>package</phase>
+ <configuration>
+ <descriptors>
+
<descriptor>src/main/assembly/seatunnel-web.xml</descriptor>
+ </descriptors>
+ <appendAssemblyId>false</appendAssemblyId>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+ </profile>
+ <profile>
+ <id>ci</id>
+ <activation>
+ <activeByDefault>true</activeByDefault>
+ <property>
+ <name>release</name>
+ <value>true</value>
+ </property>
+ </activation>
+ <build>
+
<finalName>apache-seatunnel-web-incubating-${project.version}</finalName>
+ <plugins>
+ <plugin>
+ <artifactId>maven-assembly-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>seatunnel-web</id>
+ <goals>
+ <goal>single</goal>
+ </goals>
+ <phase>package</phase>
+ <configuration>
+ <descriptors>
+
<descriptor>src/main/assembly/seatunnel-web-ci.xml</descriptor>
+ </descriptors>
+ <appendAssemblyId>false</appendAssemblyId>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+ </profile>
+ </profiles>
</project>
\ No newline at end of file
diff --git a/seatunnel-server/seatunnel-app/src/main/assembly/seatunnel-web.xml
b/seatunnel-server/seatunnel-app/src/main/assembly/seatunnel-web-ci.xml
similarity index 67%
copy from seatunnel-server/seatunnel-app/src/main/assembly/seatunnel-web.xml
copy to seatunnel-server/seatunnel-app/src/main/assembly/seatunnel-web-ci.xml
index 0d1f4935..91fe5e3c 100644
--- a/seatunnel-server/seatunnel-app/src/main/assembly/seatunnel-web.xml
+++ b/seatunnel-server/seatunnel-app/src/main/assembly/seatunnel-web-ci.xml
@@ -22,9 +22,9 @@
<formats>
<format>dir</format>
<format>zip</format>
+ <format>tar.gz</format>
</formats>
<includeBaseDirectory>false</includeBaseDirectory>
- <baseDirectory>seatunnel-web</baseDirectory>
<fileSets>
<fileSet>
<directory>${basedir}/src/main/resources</directory>
@@ -35,6 +35,13 @@
</includes>
<outputDirectory>conf</outputDirectory>
</fileSet>
+ <fileSet>
+ <directory>${basedir}/src/main/resources/script</directory>
+ <includes>
+ <include>*.*</include>
+ </includes>
+ <outputDirectory>script</outputDirectory>
+ </fileSet>
<fileSet>
<directory>${basedir}/src/main/bin</directory>
<includes>
@@ -45,14 +52,27 @@
<fileSet>
<directory>${basedir}/../../seatunnel-ui/dist</directory>
<includes>
- <include>*</include>
+ <include>**/*.*</include>
</includes>
- <outputDirectory>dist</outputDirectory>
+ <outputDirectory>ui</outputDirectory>
</fileSet>
</fileSets>
<dependencySets>
<dependencySet>
<outputDirectory>libs</outputDirectory>
</dependencySet>
+ <!-- =================== JDBC Connector Drivers ===================
-->
+ <dependencySet>
+ <useProjectArtifact>false</useProjectArtifact>
+ <useTransitiveDependencies>true</useTransitiveDependencies>
+ <unpack>false</unpack>
+ <includes>
+ <include>mysql:mysql-connector-java:jar</include>
+ <include>org.postgresql:postgresql:jar</include>
+ </includes>
+
<outputFileNameMapping>${artifact.file.name}</outputFileNameMapping>
+ <outputDirectory>libs</outputDirectory>
+ <scope>provided</scope>
+ </dependencySet>
</dependencySets>
</assembly>
diff --git a/seatunnel-server/seatunnel-app/src/main/assembly/seatunnel-web.xml
b/seatunnel-server/seatunnel-app/src/main/assembly/seatunnel-web.xml
index 0d1f4935..5dce8b83 100644
--- a/seatunnel-server/seatunnel-app/src/main/assembly/seatunnel-web.xml
+++ b/seatunnel-server/seatunnel-app/src/main/assembly/seatunnel-web.xml
@@ -24,7 +24,6 @@
<format>zip</format>
</formats>
<includeBaseDirectory>false</includeBaseDirectory>
- <baseDirectory>seatunnel-web</baseDirectory>
<fileSets>
<fileSet>
<directory>${basedir}/src/main/resources</directory>
@@ -35,6 +34,13 @@
</includes>
<outputDirectory>conf</outputDirectory>
</fileSet>
+ <fileSet>
+ <directory>${basedir}/src/main/resources/script</directory>
+ <includes>
+ <include>*.*</include>
+ </includes>
+ <outputDirectory>script</outputDirectory>
+ </fileSet>
<fileSet>
<directory>${basedir}/src/main/bin</directory>
<includes>
@@ -45,9 +51,9 @@
<fileSet>
<directory>${basedir}/../../seatunnel-ui/dist</directory>
<includes>
- <include>*</include>
+ <include>**/*.*</include>
</includes>
- <outputDirectory>dist</outputDirectory>
+ <outputDirectory>ui</outputDirectory>
</fileSet>
</fileSets>
<dependencySets>
diff --git
a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/adapter/SeatunnelWebAdapter.java
b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/adapter/SeatunnelWebAdapter.java
index 9f1d4ab0..84117d8e 100644
---
a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/adapter/SeatunnelWebAdapter.java
+++
b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/adapter/SeatunnelWebAdapter.java
@@ -23,15 +23,26 @@ import
org.apache.seatunnel.app.resolver.UserIdMethodArgumentResolver;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.method.support.HandlerMethodArgumentResolver;
+import org.springframework.web.servlet.LocaleResolver;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
+import
org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
+import
org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
+import org.springframework.web.servlet.i18n.CookieLocaleResolver;
import javax.annotation.Resource;
import java.util.List;
+import java.util.Locale;
@Configuration
public class SeatunnelWebAdapter implements WebMvcConfigurer {
+
+ public static final String LOCALE_LANGUAGE_COOKIE = "language";
+ public static final String LOGIN_INTERCEPTOR_PATH_PATTERN = "/**/*";
+ public static final String LOGIN_PATH_PATTERN =
"/seatunnel/api/v1/user/login**";
+ public static final String REGISTER_PATH_PATTERN = "/users/register";
+
@Bean
public AuthenticationInterceptor authenticationInterceptor() {
return new AuthenticationInterceptor();
@@ -40,23 +51,47 @@ public class SeatunnelWebAdapter implements
WebMvcConfigurer {
@Resource
private UserIdMethodArgumentResolver currentUserMethodArgumentResolver;
+ /**
+ * Cookie
+ *
+ * @return local resolver
+ */
+ @Bean(name = "localeResolver")
+ public LocaleResolver localeResolver() {
+ CookieLocaleResolver localeResolver = new CookieLocaleResolver();
+ localeResolver.setCookieName(LOCALE_LANGUAGE_COOKIE);
+ // set default locale
+ localeResolver.setDefaultLocale(Locale.US);
+ // set language tag compliant
+ localeResolver.setLanguageTagCompliant(false);
+ return localeResolver;
+ }
+
@Override
public void addInterceptors(InterceptorRegistry registry) {
-
registry.addInterceptor(authenticationInterceptor()).order(1).addPathPatterns("/**")
- // exclude swagger api path
- .excludePathPatterns(
- "/swagger-resources/**",
- "/webjars/**",
- "/v2/**",
- "/swagger-ui.html**"
- )
- // exclude login
- .excludePathPatterns("/api/v1/user/login**")
- ;
+ registry.addInterceptor(authenticationInterceptor())
+ .order(1)
+ .addPathPatterns(LOGIN_INTERCEPTOR_PATH_PATTERN)
+ .excludePathPatterns(LOGIN_PATH_PATTERN, REGISTER_PATH_PATTERN,
+ "/swagger-resources/**", "/webjars/**", "/v2/**", "*.html",
"/ui/**", "/error", "/swagger-ui.html**");
}
@Override
public void addArgumentResolvers(List<HandlerMethodArgumentResolver>
argumentResolvers) {
argumentResolvers.add(currentUserMethodArgumentResolver);
}
+
+ @Override
+ public void addResourceHandlers(ResourceHandlerRegistry registry) {
+
registry.addResourceHandler("/static/**").addResourceLocations("classpath:/static/");
+
registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/");
+ registry.addResourceHandler("/ui/**").addResourceLocations("file:ui/");
+ }
+
+ @Override
+ public void addViewControllers(ViewControllerRegistry registry) {
+ registry.addViewController("/").setViewName("redirect:/ui/");
+
registry.addViewController("/ui/").setViewName("forward:/ui/index.html");
+ }
+
}
diff --git
a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/controller/AuthController.java
b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/controller/AuthController.java
index fa83416f..b2d99503 100644
---
a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/controller/AuthController.java
+++
b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/controller/AuthController.java
@@ -31,7 +31,7 @@ import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import javax.validation.constraints.NotNull;
-@RequestMapping("/api/v1/auth")
+@RequestMapping("/seatunnel/api/v1/auth")
@RestController
public class AuthController {
diff --git
a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/controller/ScriptController.java
b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/controller/ScriptController.java
index ff094d43..e1885e29 100644
---
a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/controller/ScriptController.java
+++
b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/controller/ScriptController.java
@@ -50,7 +50,7 @@ import javax.validation.constraints.NotNull;
import java.util.List;
-@RequestMapping("/api/v1/script")
+@RequestMapping("/seatunnel/api/v1/script")
@RestController
public class ScriptController {
@Resource
diff --git
a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/controller/TaskController.java
b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/controller/TaskController.java
index 43f141d7..b66de54d 100644
---
a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/controller/TaskController.java
+++
b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/controller/TaskController.java
@@ -44,7 +44,7 @@ import springfox.documentation.annotations.ApiIgnore;
import javax.annotation.Resource;
import javax.validation.constraints.NotNull;
-@RequestMapping("/api/v1/task")
+@RequestMapping("/seatunnel/api/v1/task")
@RestController
public class TaskController {
diff --git
a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/controller/UserController.java
b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/controller/UserController.java
index 08cd9072..6a818496 100644
---
a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/controller/UserController.java
+++
b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/controller/UserController.java
@@ -43,7 +43,7 @@ import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import javax.validation.constraints.NotNull;
-@RequestMapping("/api/v1/user")
+@RequestMapping("/seatunnel/api/v1/user")
@RestController
public class UserController {
diff --git
a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/interceptor/AuthenticationInterceptor.java
b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/interceptor/AuthenticationInterceptor.java
index 3b432625..05a54fa3 100644
---
a/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/interceptor/AuthenticationInterceptor.java
+++
b/seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/interceptor/AuthenticationInterceptor.java
@@ -20,16 +20,15 @@ package org.apache.seatunnel.app.interceptor;
import static org.apache.seatunnel.server.common.Constants.OPTIONS;
import static org.apache.seatunnel.server.common.Constants.TOKEN;
import static org.apache.seatunnel.server.common.Constants.USER_ID;
-import static
org.apache.seatunnel.server.common.SeatunnelErrorEnum.TOKEN_ILLEGAL;
import static io.jsonwebtoken.Claims.EXPIRATION;
import org.apache.seatunnel.app.dal.dao.IUserDao;
import org.apache.seatunnel.app.dal.entity.UserLoginLog;
import org.apache.seatunnel.app.security.JwtUtils;
-import org.apache.seatunnel.server.common.SeatunnelException;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
+import org.eclipse.jetty.http.HttpStatus;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
@@ -60,24 +59,33 @@ public class AuthenticationInterceptor implements
HandlerInterceptor {
response.setHeader("Access-Control-Max-Age", "3600");
return true;
}
+
long currentTimestamp = System.currentTimeMillis();
final String token = request.getHeader(TOKEN);
if (StringUtils.isBlank(token)) {
- throw new SeatunnelException(TOKEN_ILLEGAL);
+ log.info("user does not exist");
+ response.setStatus(HttpStatus.UNAUTHORIZED_401);
+ return false;
}
final Map<String, Object> map = jwtUtils.parseToken(token);
final Integer userId = (Integer) map.get(USER_ID);
if (Objects.isNull(userId)) {
- throw new SeatunnelException(TOKEN_ILLEGAL);
+ log.info("userId does not exist");
+ response.setStatus(HttpStatus.UNAUTHORIZED_401);
+ return false;
}
final UserLoginLog userLoginLog = userDaoImpl.getLastLoginLog(userId);
if (Objects.isNull(userLoginLog) || !userLoginLog.getTokenStatus()) {
- throw new SeatunnelException(TOKEN_ILLEGAL);
+ log.info("userLoginLog does not exist");
+ response.setStatus(HttpStatus.UNAUTHORIZED_401);
+ return false;
}
final Integer expireDate = (Integer) map.get(EXPIRATION);
if (Objects.isNull(expireDate) || currentTimestamp - (long) expireDate
* 1000 > 0) {
- throw new SeatunnelException(TOKEN_ILLEGAL);
+ log.info("user token has expired");
+ response.setStatus(HttpStatus.UNAUTHORIZED_401);
+ return false;
}
map.forEach(request::setAttribute);
diff --git a/seatunnel-server/seatunnel-app/src/main/resources/application.yml
b/seatunnel-server/seatunnel-app/src/main/resources/application.yml
index 77e35480..7d9f51af 100644
--- a/seatunnel-server/seatunnel-app/src/main/resources/application.yml
+++ b/seatunnel-server/seatunnel-app/src/main/resources/application.yml
@@ -25,7 +25,7 @@ spring:
date-format: yyyy-MM-dd HH:mm:ss
datasource:
driver-class-name: com.mysql.jdbc.Driver
- url:
jdbc:mysql://127.0.0.1:3306/seatunnel?useSSL=false&useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true
+ url:
jdbc:mysql://localhost:3306/seatunnel?useSSL=false&useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true&allowPublicKeyRetrieval=true
username: root
password: 123456
mvc:
@@ -35,11 +35,11 @@ ds:
script:
dir: /dj
project:
- default: test_dj
+ default: seatunnel_test
tenant:
- default: default
+ default: gaojun
api:
- token: 12345678
+ token: 296fecc6e5f78e6a5aa39106707476fe
prefix: http://127.0.0.1:12345/dolphinscheduler
jwt:
diff --git
a/seatunnel-server/seatunnel-app/src/main/resources/script/seatunnel_server_env.sh
b/seatunnel-server/seatunnel-app/src/main/resources/script/seatunnel_server_env.sh
index 3ec563f3..5fdd3459 100644
---
a/seatunnel-server/seatunnel-app/src/main/resources/script/seatunnel_server_env.sh
+++
b/seatunnel-server/seatunnel-app/src/main/resources/script/seatunnel_server_env.sh
@@ -15,7 +15,7 @@
# limitations under the License.
#
-export HOSTNAME=""
-export PORT=""
-export USERNAME=""
-export PASSWORD=""
\ No newline at end of file
+export HOSTNAME="127.0.0.1"
+export PORT="3306"
+export USERNAME="root"
+export PASSWORD="123456"
\ No newline at end of file
diff --git
a/seatunnel-server/seatunnel-app/src/main/resources/script/seatunnel_server_h2.sql
b/seatunnel-server/seatunnel-app/src/main/resources/script/seatunnel_server_h2.sql
index 8ee41d34..696abf11 100644
---
a/seatunnel-server/seatunnel-app/src/main/resources/script/seatunnel_server_h2.sql
+++
b/seatunnel-server/seatunnel-app/src/main/resources/script/seatunnel_server_h2.sql
@@ -171,3 +171,5 @@ CREATE TABLE `user_login_log` (
-- ----------------------------
-- Records of user_login_log
-- ----------------------------
+
+INSERT INTO `seatunnel`.`user`(`username`,`password`,`status`,`type`) values
('admin', '7f97da8846fed829bb8d1fd9f8030f3b', 0, 0);
\ No newline at end of file
diff --git
a/seatunnel-server/seatunnel-app/src/main/resources/script/seatunnel_server_mysql.sql
b/seatunnel-server/seatunnel-app/src/main/resources/script/seatunnel_server_mysql.sql
index e933890b..a7a84e9d 100644
---
a/seatunnel-server/seatunnel-app/src/main/resources/script/seatunnel_server_mysql.sql
+++
b/seatunnel-server/seatunnel-app/src/main/resources/script/seatunnel_server_mysql.sql
@@ -171,3 +171,5 @@ CREATE TABLE `seatunnel`.`user_login_log` (
-- ----------------------------
-- Records of user_login_log
-- ----------------------------
+
+INSERT INTO `seatunnel`.`user`(`username`,`password`,`status`,`type`) values
('admin', '7f97da8846fed829bb8d1fd9f8030f3b', 0, 0);
diff --git a/seatunnel-ui/src/router/index.ts b/seatunnel-ui/src/router/index.ts
index 188a9f44..fba0d6b9 100644
--- a/seatunnel-ui/src/router/index.ts
+++ b/seatunnel-ui/src/router/index.ts
@@ -21,7 +21,9 @@ import NProgress from 'nprogress'
import 'nprogress/nprogress.css'
const router = createRouter({
- history: createWebHistory('/'),
+ history: createWebHistory(
+ import.meta.env.MODE === 'production' ? '/ui/' : '/'
+ ),
routes
})
diff --git a/seatunnel-ui/src/router/routes.ts
b/seatunnel-ui/src/router/routes.ts
index 8397eecf..64eac468 100644
--- a/seatunnel-ui/src/router/routes.ts
+++ b/seatunnel-ui/src/router/routes.ts
@@ -26,7 +26,11 @@ import type { Component } from 'vue'
const modules = import.meta.glob('/src/views/**/**.tsx')
const components: { [key: string]: Component } = utils.mapping(modules)
-const basePage: RouteRecordRaw[] = [dataPipes, jobs, tasks, userManage]
+const basePage: RouteRecordRaw[] = [{
+ path: '/',
+ redirect: { name: 'data-pipes' }
+ },
+ dataPipes, jobs, tasks, userManage]
const loginPage: RouteRecordRaw[] = [
{
diff --git a/seatunnel-ui/src/service/service.ts
b/seatunnel-ui/src/service/service.ts
index 8897f28d..8f3de6b9 100644
--- a/seatunnel-ui/src/service/service.ts
+++ b/seatunnel-ui/src/service/service.ts
@@ -42,7 +42,7 @@ const baseRequestConfig: AxiosRequestConfig = {
timeout: settingStore.getRequestTimeValue
? settingStore.getRequestTimeValue
: 6000,
- baseURL: '/api/v1'
+ baseURL: '/seatunnel/api/v1'
}
const service = axios.create(baseRequestConfig)
diff --git a/seatunnel-ui/vite.config.ts b/seatunnel-ui/vite.config.ts
index 237ef0aa..d7498d01 100644
--- a/seatunnel-ui/vite.config.ts
+++ b/seatunnel-ui/vite.config.ts
@@ -22,6 +22,7 @@ import viteCompression from 'vite-plugin-compression'
import path from 'path'
export default defineConfig({
+ base: process.env.NODE_ENV === 'production' ? '/ui/' : '/',
plugins: [
vue(),
vueJsx(),
@@ -42,7 +43,7 @@ export default defineConfig({
},
server: {
proxy: {
- '/api/v1': {
+ '/seatunnel/api/v1': {
target: loadEnv('development', './').VITE_APP_DEV_WEB_URL,
changeOrigin: true
}