Skip to content

Commit b343fdf

Browse files
[Feature] Add Support for Authorization (#285)
1 parent b9f8914 commit b343fdf

File tree

42 files changed

+1545
-316
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

42 files changed

+1545
-316
lines changed

pom.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333
<description>Production ready big data processing product based on Apache Spark and Apache Flink.</description>
3434

3535
<modules>
36+
<module>seatunnel-web-common</module>
3637
<module>seatunnel-server</module>
3738
<module>seatunnel-datasource</module>
3839
<module>seatunnel-web-dist</module>

seatunnel-server/seatunnel-app/pom.xml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,11 @@
4545
<groupId>org.apache.seatunnel</groupId>
4646
<artifactId>seatunnel-common</artifactId>
4747
</dependency>
48+
<dependency>
49+
<groupId>org.apache.seatunnel</groupId>
50+
<artifactId>seatunnel-web-common</artifactId>
51+
<version>${project.version}</version>
52+
</dependency>
4853
<dependency>
4954
<groupId>org.apache.seatunnel</groupId>
5055
<artifactId>seatunnel-api</artifactId>

seatunnel-server/seatunnel-app/src/main/bin/seatunnel-backend-daemon.sh

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,9 +54,14 @@ start() {
5454
fi
5555

5656
echo "$WORKDIR"
57+
CLASSPATH="$WORKDIR/../conf:$WORKDIR/../libs/*:$WORKDIR/../datasource/*"
58+
if [ -d "$WORKDIR/../ranger-seatunnel-plugin" ]; then
59+
CLASSPATH="$CLASSPATH:$WORKDIR/../ranger-seatunnel-plugin/lib/*.jar"
60+
CLASSPATH="$CLASSPATH:$WORKDIR/../ranger-seatunnel-plugin/lib/ranger-seatunnel-plugin-impl/*"
61+
fi
62+
5763
nohup $JAVA_HOME/bin/java $JAVA_OPTS \
58-
-cp "$WORKDIR/../conf":"$WORKDIR/../libs/*":"$WORKDIR/../datasource/*" \
59-
$SPRING_OPTS \
64+
-cp "$CLASSPATH" $SPRING_OPTS \
6065
org.apache.seatunnel.app.SeatunnelApplication >> "${LOGDIR}/seatunnel.out" 2>&1 &
6166
echo "seatunnel-web started"
6267
}

seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/adapter/SeatunnelWebAdapter.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,8 @@ public class SeatunnelWebAdapter implements WebMvcConfigurer {
4242
public static final String LOGIN_INTERCEPTOR_PATH_PATTERN = "/**/*";
4343
public static final String LOGIN_PATH_PATTERN = "/seatunnel/api/v1/user/login**";
4444
public static final String REGISTER_PATH_PATTERN = "/users/register";
45+
private static final String RESOURCE_NAME_PATH_PATTERN =
46+
"/seatunnel/api/v1/resources/workspace";
4547

4648
@Bean
4749
public AuthenticationInterceptor authenticationInterceptor() {
@@ -74,6 +76,7 @@ public void addInterceptors(InterceptorRegistry registry) {
7476
.excludePathPatterns(
7577
LOGIN_PATH_PATTERN,
7678
REGISTER_PATH_PATTERN,
79+
RESOURCE_NAME_PATH_PATTERN,
7780
"/swagger-resources/**",
7881
"/webjars/**",
7982
"/v2/**",

seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/controller/JobConfigController.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ Result<Void> updateJobConfig(
4646
@ApiParam(value = "jobVersionId", required = true) @PathVariable long jobVersionId,
4747
@ApiParam(value = "jobConfig", required = true) @RequestBody JobConfig jobConfig)
4848
throws JsonProcessingException {
49-
jobConfigService.updateJobConfig(jobVersionId, jobConfig);
49+
jobConfigService.updateJobConfig(jobVersionId, jobConfig, false);
5050
return Result.success();
5151
}
5252

@@ -55,6 +55,6 @@ Result<Void> updateJobConfig(
5555
Result<JobConfigRes> getJobConfig(
5656
@ApiParam(value = "jobVersionId", required = true) @PathVariable long jobVersionId)
5757
throws JsonProcessingException {
58-
return Result.success(jobConfigService.getJobConfig(jobVersionId));
58+
return Result.success(jobConfigService.getJobConfig(jobVersionId, false));
5959
}
6060
}

seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/mapper/JobLineMapper.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,5 @@
2727

2828
public interface JobLineMapper extends BaseMapper<JobLine> {
2929

30-
void deleteLinesByVersionId(@Param("versionId") long jobVersionId);
31-
3230
void insertBatchLines(@Param("lines") List<JobLine> lines);
3331
}

seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/dal/mapper/UserMapper.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,4 +49,6 @@ User selectByNameAndPasswd(
4949
@Param("authProvider") String authProvider);
5050

5151
List<User> queryEnabledUsers();
52+
53+
List<String> queryUserNames(@Param("searchName") String searchName);
5254
}

seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/interceptor/AuthenticationInterceptor.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
import org.apache.seatunnel.app.dal.entity.UserLoginLog;
2424
import org.apache.seatunnel.app.security.JwtUtils;
2525
import org.apache.seatunnel.app.security.UserContext;
26+
import org.apache.seatunnel.common.access.AccessInfo;
2627

2728
import org.apache.commons.lang3.StringUtils;
2829

@@ -106,7 +107,12 @@ public boolean preHandle(
106107
UserContext userContext = new UserContext();
107108
userContext.setUser(user);
108109
userContext.setWorkspaceId(workspaceIdFromToken);
109-
userContext.setWorkspaceName((String) map.get("workspaceName"));
110+
111+
AccessInfo accessInfo = new AccessInfo();
112+
accessInfo.setUsername(user.getUsername());
113+
accessInfo.setWorkspaceName((String) map.get("workspaceName"));
114+
userContext.setAccessInfo(accessInfo);
115+
110116
request.setAttribute(Constants.SESSION_USER_CONTEXT, userContext);
111117

112118
request.setAttribute("userId", userId);

seatunnel-server/seatunnel-app/src/main/java/org/apache/seatunnel/app/permission/ISeatunnelPermissonService.java

Lines changed: 0 additions & 60 deletions
This file was deleted.
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
/*
2+
* Licensed to the Apache Software Foundation (ASF) under one or more
3+
* contributor license agreements. See the NOTICE file distributed with
4+
* this work for additional information regarding copyright ownership.
5+
* The ASF licenses this file to You under the Apache License, Version 2.0
6+
* (the "License"); you may not use this file except in compliance with
7+
* the License. You may obtain a copy of the License at
8+
*
9+
* http://www.apache.org/licenses/LICENSE-2.0
10+
*
11+
* Unless required by applicable law or agreed to in writing, software
12+
* distributed under the License is distributed on an "AS IS" BASIS,
13+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14+
* See the License for the specific language governing permissions and
15+
* limitations under the License.
16+
*/
17+
18+
package org.apache.seatunnel.app.permission;
19+
20+
import org.apache.seatunnel.common.access.SeatunnelAccessController;
21+
22+
import org.springframework.beans.factory.annotation.Value;
23+
import org.springframework.context.annotation.Bean;
24+
import org.springframework.context.annotation.Configuration;
25+
26+
@Configuration
27+
public class SeatunnelAccessControllerConfig {
28+
29+
@Value(
30+
"${seatunnel-web.access-controller-class:org.apache.seatunnel.app.permission.SeatunnelAccessControllerDefaultImpl org.apache.seatunnel.app.permission.DefaultSeatunnelAccessController}")
31+
private String accessControllerClassName;
32+
33+
@Bean
34+
public SeatunnelAccessController seatunnelAccessController() {
35+
try {
36+
Class<?> clazz = Class.forName(accessControllerClassName);
37+
return (SeatunnelAccessController) clazz.getDeclaredConstructor().newInstance();
38+
} catch (Exception e) {
39+
throw new IllegalStateException(
40+
"Failed to create SeatunnelAccessController instance for class: "
41+
+ accessControllerClassName,
42+
e);
43+
}
44+
}
45+
}

0 commit comments

Comments
 (0)