Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit04eecde

Browse files
authored
refactor: 优化token相关事件为异步事件,方便传递上下文 (#287)
1 parent4da0800 commit04eecde

File tree

5 files changed

+53
-55
lines changed

5 files changed

+53
-55
lines changed

‎hsweb-authorization/hsweb-authorization-api/src/main/java/org/hswebframework/web/authorization/token/DefaultUserTokenManager.java‎

Lines changed: 32 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@
2626
importorg.hswebframework.web.authorization.token.event.UserTokenCreatedEvent;
2727
importorg.hswebframework.web.authorization.token.event.UserTokenRemovedEvent;
2828
importorg.springframework.beans.factory.annotation.Autowired;
29-
importorg.springframework.context.ApplicationEvent;
3029
importorg.springframework.context.ApplicationEventPublisher;
3130
importreactor.core.publisher.Flux;
3231
importreactor.core.publisher.Mono;
@@ -170,42 +169,39 @@ public Mono<Void> signOutByUserId(String userId) {
170169
}
171170
returnMono.defer(() -> {
172171
Set<String>tokens =getUserToken(userId);
173-
tokens.forEach(token ->signOutByToken(token,false));
174-
tokens.clear();
175-
userStorage.remove(userId);
176-
returnMono.empty();
172+
returnFlux
173+
.fromIterable(tokens)
174+
.flatMap(token ->signOutByToken(token,false))
175+
.then(Mono.fromRunnable(() -> {
176+
tokens.clear();
177+
userStorage.remove(userId);
178+
}));
177179
});
178180
}
179181

180-
privatevoidsignOutByToken(Stringtoken,booleanremoveUserToken) {
181-
if (token ==null) {
182-
return;
183-
}
184-
LocalUserTokentokenObject =tokenStorage.remove(token);
185-
if (tokenObject !=null) {
186-
StringuserId =tokenObject.getUserId();
187-
if (removeUserToken) {
188-
Set<String>tokens =getUserToken(userId);
189-
if (!tokens.isEmpty()) {
190-
tokens.remove(token);
191-
}
192-
if (tokens.isEmpty()) {
193-
userStorage.remove(tokenObject.getUserId());
182+
privateMono<Void>signOutByToken(Stringtoken,booleanremoveUserToken) {
183+
if (token !=null) {
184+
LocalUserTokentokenObject =tokenStorage.remove(token);
185+
if (tokenObject !=null) {
186+
StringuserId =tokenObject.getUserId();
187+
if (removeUserToken) {
188+
Set<String>tokens =getUserToken(userId);
189+
if (!tokens.isEmpty()) {
190+
tokens.remove(token);
191+
}
192+
if (tokens.isEmpty()) {
193+
userStorage.remove(tokenObject.getUserId());
194+
}
194195
}
196+
returnnewUserTokenRemovedEvent(tokenObject).publish(eventPublisher);
195197
}
196-
publishEvent(newUserTokenRemovedEvent(tokenObject));
197198
}
199+
returnMono.empty();
198200
}
199201

200202
@Override
201203
publicMono<Void>signOutByToken(Stringtoken) {
202-
returnMono.fromRunnable(() ->signOutByToken(token,true));
203-
}
204-
205-
protectedvoidpublishEvent(ApplicationEventevent) {
206-
if (null !=eventPublisher) {
207-
eventPublisher.publishEvent(event);
208-
}
204+
returnsignOutByToken(token,true);
209205
}
210206

211207
publicMono<Void>changeTokenState(UserTokenuserToken,TokenStatestate) {
@@ -216,7 +212,7 @@ public Mono<Void> changeTokenState(UserToken userToken, TokenState state) {
216212
token.setState(state);
217213
syncToken(userToken);
218214

219-
publishEvent(newUserTokenChangedEvent(copy,userToken));
215+
returnnewUserTokenChangedEvent(copy,userToken).publish(eventPublisher);
220216
}
221217
returnMono.empty();
222218
}
@@ -250,13 +246,13 @@ private <T extends LocalUserToken> Mono<T> doSignIn(String token, String type, S
250246
detail.setType(type);
251247
detail.setMaxInactiveInterval(maxInactiveInterval);
252248
detail.setState(TokenState.normal);
253-
RunnabledoSign = () -> {
249+
Mono<Void>doSign =Mono.defer(() -> {
254250
tokenStorage.put(token,detail);
255251

256252
getUserToken(userId).add(token);
257253

258-
publishEvent(newUserTokenCreatedEvent(detail));
259-
};
254+
returnnewUserTokenCreatedEvent(detail).publish(eventPublisher);
255+
});
260256
AllopatricLoginModemode =allopatricLoginModes.getOrDefault(type,allopatricLoginMode);
261257
if (mode ==AllopatricLoginMode.deny) {
262258
returngetByUserId(userId)
@@ -268,17 +264,16 @@ private <T extends LocalUserToken> Mono<T> doSignIn(String token, String type, S
268264
}
269265
returnMono.empty();
270266
})
271-
.then(Mono.just(detail))
272-
.doOnNext(__ ->doSign.run());
267+
.then(doSign)
268+
.thenReturn(detail);
273269
}elseif (mode ==AllopatricLoginMode.offlineOther) {
274270
returngetByUserId(userId)
275271
.filter(userToken ->type.equals(userToken.getType()))
276272
.flatMap(userToken ->changeTokenState(userToken,TokenState.offline))
277-
.then(Mono.just(detail))
278-
.doOnNext(__ ->doSign.run());
273+
.then(doSign)
274+
.thenReturn(detail);
279275
}
280-
doSign.run();
281-
returnMono.just(detail);
276+
returndoSign.thenReturn(detail);
282277
});
283278

284279
}

‎hsweb-authorization/hsweb-authorization-api/src/main/java/org/hswebframework/web/authorization/token/event/UserTokenChangedEvent.java‎

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,12 @@
22

33
importorg.hswebframework.web.authorization.events.AuthorizationEvent;
44
importorg.hswebframework.web.authorization.token.UserToken;
5-
importorg.springframework.context.ApplicationEvent;
5+
importorg.hswebframework.web.event.DefaultAsyncEvent;
66

7-
publicclassUserTokenChangedEventextendsApplicationEventimplementsAuthorizationEvent {
7+
publicclassUserTokenChangedEventextendsDefaultAsyncEventimplementsAuthorizationEvent {
88
privatefinalUserTokenbefore,after;
99

1010
publicUserTokenChangedEvent(UserTokenbefore,UserTokenafter) {
11-
super(after);
1211
this.before =before;
1312
this.after =after;
1413
}

‎hsweb-authorization/hsweb-authorization-api/src/main/java/org/hswebframework/web/authorization/token/event/UserTokenCreatedEvent.java‎

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,13 @@
11
packageorg.hswebframework.web.authorization.token.event;
22

3-
importorg.hswebframework.web.authorization.token.UserToken;
43
importorg.hswebframework.web.authorization.events.AuthorizationEvent;
5-
importorg.springframework.context.ApplicationEvent;
4+
importorg.hswebframework.web.authorization.token.UserToken;
5+
importorg.hswebframework.web.event.DefaultAsyncEvent;
66

7-
publicclassUserTokenCreatedEventextendsApplicationEventimplementsAuthorizationEvent {
7+
publicclassUserTokenCreatedEventextendsDefaultAsyncEventimplementsAuthorizationEvent {
88
privatefinalUserTokendetail;
99

1010
publicUserTokenCreatedEvent(UserTokendetail) {
11-
super(detail);
1211
this.detail =detail;
1312
}
1413

‎hsweb-authorization/hsweb-authorization-api/src/main/java/org/hswebframework/web/authorization/token/event/UserTokenRemovedEvent.java‎

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,19 @@
22

33
importorg.hswebframework.web.authorization.events.AuthorizationEvent;
44
importorg.hswebframework.web.authorization.token.UserToken;
5-
importorg.springframework.context.ApplicationEvent;
5+
importorg.hswebframework.web.event.DefaultAsyncEvent;
66

7-
publicclassUserTokenRemovedEventextendsApplicationEventimplementsAuthorizationEvent {
7+
publicclassUserTokenRemovedEventextendsDefaultAsyncEventimplementsAuthorizationEvent {
88

99
privatestaticfinallongserialVersionUID = -6662943150068863177L;
1010

11+
privatefinalUserTokentoken;
12+
1113
publicUserTokenRemovedEvent(UserTokentoken) {
12-
super(token);
14+
this.token=token;
1315
}
1416

1517
publicUserTokengetDetail() {
16-
return((UserToken)getSource());
18+
returntoken;
1719
}
1820
}

‎hsweb-authorization/hsweb-authorization-api/src/main/java/org/hswebframework/web/authorization/token/redis/RedisUserTokenManager.java‎

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -345,16 +345,19 @@ private Mono<Void> onTokenRemoved(UserToken token) {
345345
if (eventPublisher ==null) {
346346
returnnotifyTokenRemoved(token.getToken());
347347
}
348-
returnMono.fromRunnable(() ->eventPublisher.publishEvent(newUserTokenRemovedEvent(token)))
349-
.then(notifyTokenRemoved(token.getToken()));
348+
returnnewUserTokenRemovedEvent(token)
349+
.publish(eventPublisher)
350+
.then(notifyTokenRemoved(token.getToken()));
350351
}
351352

352353
privateMono<Void>onTokenChanged(UserTokenold,SimpleUserTokennewToken) {
353354
localCache.put(newToken.getToken(),newToken);
354355
if (eventPublisher ==null) {
355356
returnnotifyTokenRemoved(newToken.getToken());
356357
}
357-
returnMono.fromRunnable(() ->eventPublisher.publishEvent(newUserTokenChangedEvent(old,newToken)));
358+
returnnewUserTokenChangedEvent(old,newToken)
359+
.publish(eventPublisher)
360+
.then(notifyTokenRemoved(newToken.getToken()));
358361
}
359362

360363
privateMono<UserToken>onUserTokenCreated(SimpleUserTokentoken) {
@@ -363,10 +366,10 @@ private Mono<UserToken> onUserTokenCreated(SimpleUserToken token) {
363366
returnnotifyTokenRemoved(token.getToken())
364367
.thenReturn(token);
365368
}
366-
returnMono
367-
.fromRunnable(() ->eventPublisher.publishEvent(newUserTokenCreatedEvent(token)))
368-
.then(notifyTokenRemoved(token.getToken()))
369-
.thenReturn(token);
369+
returnnewUserTokenCreatedEvent(token)
370+
.publish(eventPublisher)
371+
.then(notifyTokenRemoved(token.getToken()))
372+
.thenReturn(token);
370373
}
371374

372375
}

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp