mirror of
https://github.com/hs-web/hsweb-framework.git
synced 2026-05-31 09:53:21 +08:00
refactor: 优化配置
This commit is contained in:
@@ -13,7 +13,7 @@ import org.springframework.context.annotation.Configuration;
|
||||
/**
|
||||
* @author zhouhao
|
||||
*/
|
||||
@Configuration
|
||||
@Configuration(proxyBeanMethods = false)
|
||||
@AutoConfigureAfter(AuthorizingHandlerAutoConfiguration.class)
|
||||
public class AopAuthorizeAutoConfiguration {
|
||||
|
||||
|
||||
@@ -10,6 +10,7 @@ import org.hswebframework.web.authorization.basic.handler.DefaultAuthorizingHand
|
||||
import org.hswebframework.web.authorization.basic.handler.UserAllowPermissionHandler;
|
||||
import org.hswebframework.web.authorization.basic.web.*;
|
||||
import org.hswebframework.web.authorization.token.UserTokenManager;
|
||||
import org.springframework.beans.factory.ObjectProvider;
|
||||
import org.springframework.boot.autoconfigure.AutoConfiguration;
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
|
||||
@@ -38,8 +39,14 @@ public class AuthorizingHandlerAutoConfiguration {
|
||||
|
||||
@Bean
|
||||
@ConditionalOnWebApplication(type = ConditionalOnWebApplication.Type.REACTIVE)
|
||||
public UserTokenWebFilter userTokenWebFilter() {
|
||||
return new UserTokenWebFilter();
|
||||
public UserTokenWebFilter userTokenWebFilter(UserTokenManager userTokenManager,
|
||||
ObjectProvider<ReactiveUserTokenParser> tokenParsers,
|
||||
ObjectProvider<ReactiveUserTokenGenerator> tokenGenerators) {
|
||||
UserTokenWebFilter filter = new UserTokenWebFilter(userTokenManager);
|
||||
tokenParsers.forEach(filter::register);
|
||||
tokenGenerators.forEach(filter::register);
|
||||
|
||||
return filter;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package org.hswebframework.web.authorization.basic.web;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.hswebframework.web.authorization.events.AuthorizationSuccessEvent;
|
||||
import org.hswebframework.web.authorization.token.ParsedToken;
|
||||
@@ -27,40 +28,39 @@ import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.function.Function;
|
||||
|
||||
@Component
|
||||
@Slf4j
|
||||
public class UserTokenWebFilter implements WebFilter, BeanPostProcessor {
|
||||
@AllArgsConstructor
|
||||
public class UserTokenWebFilter implements WebFilter {
|
||||
|
||||
private final List<ReactiveUserTokenParser> parsers = new ArrayList<>();
|
||||
|
||||
private final Map<String, ReactiveUserTokenGenerator> tokenGeneratorMap = new HashMap<>();
|
||||
|
||||
@Autowired
|
||||
private UserTokenManager userTokenManager;
|
||||
private final UserTokenManager userTokenManager;
|
||||
|
||||
@Override
|
||||
@NonNull
|
||||
public Mono<Void> filter(@NonNull ServerWebExchange exchange, WebFilterChain chain) {
|
||||
|
||||
return Flux
|
||||
.fromIterable(parsers)
|
||||
.flatMap(parser -> parser.parseToken(exchange))
|
||||
.next()
|
||||
.map(token -> chain
|
||||
.filter(exchange)
|
||||
.contextWrite(Context.of(ParsedToken.class, token)))
|
||||
.defaultIfEmpty(chain.filter(exchange))
|
||||
.flatMap(Function.identity())
|
||||
.contextWrite(ReactiveLogger.start("requestId", exchange.getRequest().getId()));
|
||||
.fromIterable(parsers)
|
||||
.flatMap(parser -> parser.parseToken(exchange))
|
||||
.next()
|
||||
.map(token -> chain
|
||||
.filter(exchange)
|
||||
.contextWrite(Context.of(ParsedToken.class, token)))
|
||||
.defaultIfEmpty(chain.filter(exchange))
|
||||
.flatMap(Function.identity())
|
||||
.contextWrite(ReactiveLogger.start("requestId", exchange.getRequest().getId()));
|
||||
|
||||
}
|
||||
|
||||
@EventListener
|
||||
public void handleUserSign(AuthorizationSuccessEvent event) {
|
||||
ReactiveUserTokenGenerator generator = event
|
||||
.<String>getParameter("tokenType")
|
||||
.map(tokenGeneratorMap::get)
|
||||
.orElseGet(() -> tokenGeneratorMap.get("default"));
|
||||
.<String>getParameter("tokenType")
|
||||
.map(tokenGeneratorMap::get)
|
||||
.orElseGet(() -> tokenGeneratorMap.get("default"));
|
||||
if (generator != null) {
|
||||
GeneratedToken token = generator.generate(event.getAuthentication());
|
||||
event.getResult().putAll(token.getResponse());
|
||||
@@ -72,26 +72,23 @@ public class UserTokenWebFilter implements WebFilter, BeanPostProcessor {
|
||||
.orElse(token.getTimeout());
|
||||
event.getResult().put("expires", expires);
|
||||
event.async(userTokenManager
|
||||
.signIn(token.getToken(), token.getType(), event
|
||||
.getAuthentication()
|
||||
.getUser()
|
||||
.getId(), expires)
|
||||
.doOnNext(t -> log.debug("user [{}] sign in", t.getUserId()))
|
||||
.then());
|
||||
.signIn(token.getToken(), token.getType(), event
|
||||
.getAuthentication()
|
||||
.getUser()
|
||||
.getId(), expires)
|
||||
.doOnNext(t -> log.debug("user [{}] sign in", t.getUserId()))
|
||||
.then());
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
|
||||
if (bean instanceof ReactiveUserTokenGenerator) {
|
||||
ReactiveUserTokenGenerator generator = ((ReactiveUserTokenGenerator) bean);
|
||||
tokenGeneratorMap.put(generator.getTokenType(), generator);
|
||||
}
|
||||
if (bean instanceof ReactiveUserTokenParser) {
|
||||
parsers.add(((ReactiveUserTokenParser) bean));
|
||||
}
|
||||
return bean;
|
||||
public void register(ReactiveUserTokenGenerator generator) {
|
||||
tokenGeneratorMap.put(generator.getTokenType(), generator);
|
||||
}
|
||||
|
||||
public void register(ReactiveUserTokenParser parser) {
|
||||
parsers.add(parser);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user