Skip to content

Commit 681273b

Browse files
wushengyeyouyazqburde
authored andcommitted
Add feature to support DSS SSO integration standard with DolphinScheduler.
1 parent 6859cc4 commit 681273b

File tree

3 files changed

+144
-0
lines changed

3 files changed

+144
-0
lines changed

plugins/dolphinscheduler/dolphinscheduler-prod-metrics/pom.xml

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,34 @@
3333
<groupId>org.apache.dolphinscheduler</groupId>
3434
<artifactId>dolphinscheduler-api</artifactId>
3535
<version>${dolphinscheduler.version}</version>
36+
<scope>provided</scope>
37+
</dependency>
38+
<dependency>
39+
<groupId>com.webank.wedatasphere.dss</groupId>
40+
<artifactId>spring-origin-sso-integration-plugin</artifactId>
41+
<version>${dss.version}</version>
42+
<exclusions>
43+
<exclusion>
44+
<groupId>mysql</groupId>
45+
<artifactId>mysql-connector-java</artifactId>
46+
</exclusion>
47+
<exclusion>
48+
<groupId>org.springframework</groupId>
49+
<artifactId>spring-core</artifactId>
50+
</exclusion>
51+
<exclusion>
52+
<artifactId>spring-webmvc</artifactId>
53+
<groupId>org.springframework</groupId>
54+
</exclusion>
55+
<exclusion>
56+
<artifactId>spring-context-support</artifactId>
57+
<groupId>org.springframework</groupId>
58+
</exclusion>
59+
<exclusion>
60+
<artifactId>spring-aop</artifactId>
61+
<groupId>org.springframework</groupId>
62+
</exclusion>
63+
</exclusions>
3664
</dependency>
3765
</dependencies>
3866

@@ -51,6 +79,25 @@
5179
<groupId>org.apache.maven.plugins</groupId>
5280
<artifactId>maven-jar-plugin</artifactId>
5381
</plugin>
82+
<plugin>
83+
<groupId>org.apache.maven.plugins</groupId>
84+
<artifactId>maven-assembly-plugin</artifactId>
85+
<version>2.3</version>
86+
<configuration>
87+
<descriptorRefs>
88+
<descriptorRef>jar-with-dependencies</descriptorRef>
89+
</descriptorRefs>
90+
</configuration>
91+
<executions>
92+
<execution>
93+
<id>assembly</id>
94+
<phase>package</phase>
95+
<goals>
96+
<goal>single</goal>
97+
</goals>
98+
</execution>
99+
</executions>
100+
</plugin>
54101
</plugins>
55102
<resources>
56103
<resource>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package org.apache.dolphinscheduler.api.configuration;
2+
3+
import com.webank.wedatasphere.dss.standard.app.sso.plugin.filter.SSOPluginFilter;
4+
import org.springframework.beans.factory.annotation.Autowired;
5+
import org.springframework.boot.web.servlet.FilterRegistrationBean;
6+
import org.springframework.context.annotation.Bean;
7+
import org.springframework.context.annotation.Configuration;
8+
9+
/**
10+
* @author enjoyyin
11+
* @date 2022-11-16
12+
* @since 1.1.1
13+
*/
14+
@Configuration
15+
public class DssSSOConfiguration {
16+
17+
@Bean
18+
public FilterRegistrationBean<SSOPluginFilter> dssSSOInterceptor(@Autowired SSOPluginFilter ssoPluginFilter) {
19+
FilterRegistrationBean<SSOPluginFilter> filter = new FilterRegistrationBean<>();
20+
filter.setName("dssSSOFilter");
21+
filter.setFilter(ssoPluginFilter);
22+
filter.setOrder(-1);
23+
return filter;
24+
}
25+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
package org.apache.dolphinscheduler.api.interceptor;
2+
3+
import com.webank.wedatasphere.dss.standard.app.sso.plugin.filter.HttpRequestUserInterceptor;
4+
import org.apache.commons.lang.ArrayUtils;
5+
import org.apache.dolphinscheduler.api.controller.BaseController;
6+
import org.apache.dolphinscheduler.api.enums.Status;
7+
import org.apache.dolphinscheduler.api.exceptions.ServiceException;
8+
import org.apache.dolphinscheduler.api.security.Authenticator;
9+
import org.apache.dolphinscheduler.api.service.SessionService;
10+
import org.apache.dolphinscheduler.common.Constants;
11+
import org.apache.dolphinscheduler.dao.entity.User;
12+
import org.apache.dolphinscheduler.dao.mapper.UserMapper;
13+
import org.slf4j.Logger;
14+
import org.slf4j.LoggerFactory;
15+
import org.springframework.beans.factory.annotation.Autowired;
16+
import org.springframework.stereotype.Component;
17+
18+
import javax.servlet.http.Cookie;
19+
import javax.servlet.http.HttpServletRequest;
20+
import javax.servlet.http.HttpServletRequestWrapper;
21+
22+
/**
23+
* @author enjoyyin
24+
* @date 2022-11-16
25+
* @since 1.1.1
26+
*/
27+
@Component
28+
public class DolphinSchedulerHttpRequestUserInterceptor implements HttpRequestUserInterceptor {
29+
30+
private Logger logger = LoggerFactory.getLogger(getClass());
31+
32+
@Autowired
33+
private UserMapper userMapper;
34+
@Autowired
35+
private Authenticator authenticator;
36+
@Autowired
37+
private SessionService sessionService;
38+
39+
@Override
40+
public HttpServletRequest addUserToRequest(String user, HttpServletRequest req) {
41+
logger.info("try to add a new session.id for DSS user {}.", user);
42+
User userObj = userMapper.queryByUserNameAccurately(user);
43+
if(userObj == null) {
44+
logger.error("DSS user {} is not exists in DolphinScheduler db.", user);
45+
throw new ServiceException(Status.USER_NOT_EXIST);
46+
}
47+
String sessionId = sessionService.createSession(userObj, BaseController.getClientIpAddress(req));
48+
Cookie cookie = new Cookie(Constants.SESSION_ID, sessionId);
49+
cookie.setHttpOnly(true);
50+
logger.info("added a new session.id {} for DSS user {}.", sessionId, user);
51+
return new HttpServletRequestWrapper(req) {
52+
@Override
53+
public Cookie[] getCookies() {
54+
return (Cookie[]) ArrayUtils.add(super.getCookies(), cookie);
55+
}
56+
};
57+
}
58+
59+
@Override
60+
public boolean isUserExistInSession(HttpServletRequest req) {
61+
return authenticator.getAuthUser(req) != null;
62+
}
63+
64+
@Override
65+
public String getUser(HttpServletRequest req) {
66+
User user = authenticator.getAuthUser(req);
67+
if(user != null) {
68+
return user.getUserName();
69+
}
70+
return null;
71+
}
72+
}

0 commit comments

Comments
 (0)