Skip to content

Commit 14af4de

Browse files
committed
Expire session when update user password
1 parent 1d23e4f commit 14af4de

File tree

24 files changed

+235
-358
lines changed

24 files changed

+235
-358
lines changed

dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/controller/LoginController.java

Lines changed: 4 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
import org.apache.dolphinscheduler.common.enums.UserType;
3535
import org.apache.dolphinscheduler.common.utils.JSONUtils;
3636
import org.apache.dolphinscheduler.common.utils.OkHttpUtils;
37+
import org.apache.dolphinscheduler.dao.entity.Session;
3738
import org.apache.dolphinscheduler.dao.entity.User;
3839

3940
import org.apache.commons.lang3.StringUtils;
@@ -160,20 +161,13 @@ public Result ssoLogin(HttpServletRequest request) {
160161
return Result.success();
161162
}
162163

163-
/**
164-
* sign out
165-
*
166-
* @param loginUser login user
167-
* @param request request
168-
* @return sign out result
169-
*/
170164
@Operation(summary = "signOut", description = "SIGNOUT_NOTES")
171165
@PostMapping(value = "/signOut")
172166
@ApiException(SIGN_OUT_ERROR)
173167
public Result signOut(@Parameter(hidden = true) @RequestAttribute(value = Constants.SESSION_USER) User loginUser,
174168
HttpServletRequest request) {
175169
String ip = getClientIpAddress(request);
176-
sessionService.signOut(ip, loginUser);
170+
sessionService.expireSession(loginUser.getId());
177171
// clear session
178172
request.removeAttribute(Constants.SESSION_USER);
179173
return success();
@@ -244,13 +238,10 @@ public void loginByAuth2(@RequestParam String code, @RequestParam String provide
244238
if (user == null) {
245239
user = usersService.createUser(UserType.GENERAL_USER, username, null);
246240
}
247-
String sessionId = sessionService.createSession(user, null);
248-
if (sessionId == null) {
249-
log.error("Failed to create session, userName:{}.", user.getUserName());
250-
}
241+
Session session = sessionService.createSessionIfAbsent(user);
251242
response.setStatus(HttpStatus.SC_MOVED_TEMPORARILY);
252243
response.sendRedirect(String.format("%s?sessionId=%s&authType=%s", oAuth2ClientProperties.getCallbackUrl(),
253-
sessionId, "oauth2"));
244+
session.getId(), "oauth2"));
254245
} catch (Exception ex) {
255246
log.error(ex.getMessage(), ex);
256247
response.setStatus(HttpStatus.SC_MOVED_TEMPORARILY);

dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/controller/UsersController.java

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -76,18 +76,6 @@ public class UsersController extends BaseController {
7676
@Autowired
7777
private UsersService usersService;
7878

79-
/**
80-
* create user
81-
*
82-
* @param loginUser login user
83-
* @param userName user name
84-
* @param userPassword user password
85-
* @param email email
86-
* @param tenantId tenant id
87-
* @param phone phone
88-
* @param queue queue
89-
* @return create result code
90-
*/
9179
@Operation(summary = "createUser", description = "CREATE_USER_NOTES")
9280
@Parameters({
9381
@Parameter(name = "userName", description = "USER_NAME", required = true, schema = @Schema(implementation = String.class)),

dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/security/Authenticator.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,16 +24,19 @@
2424

2525
import javax.servlet.http.HttpServletRequest;
2626

27+
import lombok.NonNull;
28+
2729
public interface Authenticator {
2830

2931
/**
3032
* Verifying legality via username and password
33+
*
3134
* @param username user name
3235
* @param password user password
33-
* @param extra extra info
36+
* @param ip client ip
3437
* @return result object
3538
*/
36-
Result<Map<String, String>> authenticate(String username, String password, String extra);
39+
Result<Map<String, String>> authenticate(@NonNull String username, String password, @NonNull String ip);
3740

3841
/**
3942
* Get authenticated user

dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/security/impl/AbstractAuthenticator.java

Lines changed: 19 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -29,15 +29,20 @@
2929
import org.apache.dolphinscheduler.dao.entity.Session;
3030
import org.apache.dolphinscheduler.dao.entity.User;
3131

32+
import org.apache.commons.lang3.StringUtils;
33+
3234
import java.util.HashMap;
3335
import java.util.Map;
3436
import java.util.Objects;
3537

38+
import javax.servlet.http.Cookie;
3639
import javax.servlet.http.HttpServletRequest;
3740

41+
import lombok.NonNull;
3842
import lombok.extern.slf4j.Slf4j;
3943

4044
import org.springframework.beans.factory.annotation.Autowired;
45+
import org.springframework.web.util.WebUtils;
4146

4247
@Slf4j
4348
public abstract class AbstractAuthenticator implements Authenticator {
@@ -56,15 +61,14 @@ public abstract class AbstractAuthenticator implements Authenticator {
5661
*
5762
* @param userId user identity field
5863
* @param password user login password
59-
* @param extra extra user login field
6064
* @return user object in databse
6165
*/
62-
public abstract User login(String userId, String password, String extra);
66+
public abstract User login(@NonNull String userId, String password);
6367

6468
@Override
65-
public Result<Map<String, String>> authenticate(String userId, String password, String extra) {
69+
public Result<Map<String, String>> authenticate(@NonNull String userId, String password, @NonNull String ip) {
6670
Result<Map<String, String>> result = new Result<>();
67-
User user = login(userId, password, extra);
71+
User user = login(userId, password);
6872
if (user == null) {
6973
if (Objects.equals(securityConfig.getType(), AuthenticationType.CASDOOR_SSO.name())) {
7074
log.error("State or code entered incorrectly.");
@@ -87,9 +91,8 @@ public Result<Map<String, String>> authenticate(String userId, String password,
8791
}
8892

8993
// create session
90-
String sessionId = sessionService.createSession(user, extra);
91-
if (sessionId == null) {
92-
log.error("Failed to create session, userName:{}.", user.getUserName());
94+
Session session = sessionService.createSessionIfAbsent(user);
95+
if (session == null) {
9396
result.setCode(Status.LOGIN_SESSION_FAILED.getCode());
9497
result.setMsg(Status.LOGIN_SESSION_FAILED.getMsg());
9598
return result;
@@ -98,7 +101,7 @@ public Result<Map<String, String>> authenticate(String userId, String password,
98101
log.info("Session is created, userName:{}.", user.getUserName());
99102

100103
Map<String, String> data = new HashMap<>();
101-
data.put(Constants.SESSION_ID, sessionId);
104+
data.put(Constants.SESSION_ID, session.getId());
102105
data.put(Constants.SECURITY_CONFIG_TYPE, securityConfig.getType());
103106

104107
result.setData(data);
@@ -109,9 +112,15 @@ public Result<Map<String, String>> authenticate(String userId, String password,
109112

110113
@Override
111114
public User getAuthUser(HttpServletRequest request) {
112-
Session session = sessionService.getSession(request);
115+
String sessionId = request.getHeader(Constants.SESSION_ID);
116+
if (StringUtils.isBlank(sessionId)) {
117+
Cookie cookie = WebUtils.getCookie(request, Constants.SESSION_ID);
118+
if (cookie != null) {
119+
sessionId = cookie.getValue();
120+
}
121+
}
122+
Session session = sessionService.getSession(sessionId);
113123
if (session == null) {
114-
log.info("session info is null ");
115124
return null;
116125
}
117126
// get user object from session

dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/security/impl/ldap/LdapAuthenticator.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@
2020
import org.apache.dolphinscheduler.api.security.impl.AbstractAuthenticator;
2121
import org.apache.dolphinscheduler.dao.entity.User;
2222

23+
import lombok.NonNull;
24+
2325
import org.springframework.beans.factory.annotation.Autowired;
2426

2527
public class LdapAuthenticator extends AbstractAuthenticator {
@@ -28,7 +30,7 @@ public class LdapAuthenticator extends AbstractAuthenticator {
2830
LdapService ldapService;
2931

3032
@Override
31-
public User login(String userId, String password, String extra) {
33+
public User login(@NonNull String userId, String password) {
3234
User user = null;
3335
String ldapEmail = ldapService.ldapLogin(userId, password);
3436
if (ldapEmail != null) {

dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/security/impl/pwd/PasswordAuthenticator.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
public class PasswordAuthenticator extends AbstractAuthenticator {
2424

2525
@Override
26-
public User login(String userId, String password, String extra) {
26+
public User login(String userId, String password) {
2727
return userService.queryUser(userId, password);
2828
}
2929
}

dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/security/impl/sso/CasdoorAuthenticator.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,8 @@
2727

2828
import javax.servlet.http.HttpServletRequest;
2929

30+
import lombok.NonNull;
31+
3032
import org.casbin.casdoor.entity.CasdoorUser;
3133
import org.casbin.casdoor.service.CasdoorAuthService;
3234
import org.springframework.beans.factory.annotation.Autowired;
@@ -46,7 +48,7 @@ public class CasdoorAuthenticator extends AbstractSsoAuthenticator {
4648
private String adminUserName;
4749

4850
@Override
49-
public User login(String state, String code, String extra) {
51+
public User login(@NonNull String state, String code) {
5052
ServletRequestAttributes servletRequestAttributes =
5153
(ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
5254
if (servletRequestAttributes == null) {

dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/SessionService.java

Lines changed: 5 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -20,36 +20,13 @@
2020
import org.apache.dolphinscheduler.dao.entity.Session;
2121
import org.apache.dolphinscheduler.dao.entity.User;
2222

23-
import javax.servlet.http.HttpServletRequest;
24-
25-
/**
26-
* session service
27-
*/
2823
public interface SessionService {
2924

30-
/**
31-
* get user session from request
32-
*
33-
* @param request request
34-
* @return session
35-
*/
36-
Session getSession(HttpServletRequest request);
25+
Session getSession(String sessionId);
26+
27+
Session createSessionIfAbsent(User user);
3728

38-
/**
39-
* create session
40-
*
41-
* @param user user
42-
* @param ip ip
43-
* @return session string
44-
*/
45-
String createSession(User user, String ip);
29+
void expireSession(Integer userId);
4630

47-
/**
48-
* sign out
49-
* remove ip restrictions
50-
*
51-
* @param ip no use
52-
* @param loginUser login user
53-
*/
54-
void signOut(String ip, User loginUser);
31+
boolean isSessionExpire(Session session);
5532
}

0 commit comments

Comments
 (0)