fix: Fix beans are not loaded as the expected order.
This commit is contained in:
+5
-1
@@ -25,11 +25,13 @@ import com.auth0.jwt.interfaces.DecodedJWT;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.boot.autoconfigure.AutoConfiguration;
|
||||
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
|
||||
import org.springframework.boot.context.properties.EnableConfigurationProperties;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.DependsOn;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
@@ -61,6 +63,8 @@ import org.springframework.context.annotation.Bean;
|
||||
@EnableConfigurationProperties(value = {SimpleJwtProperties.class})
|
||||
@ConditionalOnClass({DecodedJWT.class, AuthzeroTokenResolver.class})
|
||||
@ConditionalOnMissingBean({TokenResolver.class})
|
||||
@ConditionalOnBean(value = {GuidCreator.class}, name = "jtiCreator")
|
||||
@AutoConfigureAfter(value = GuidAutoConfiguration.class)
|
||||
public class AuthzeroTokenResolverAutoConfiguration {
|
||||
|
||||
/**
|
||||
@@ -96,8 +100,8 @@ public class AuthzeroTokenResolverAutoConfiguration {
|
||||
* @return the {@link TokenResolver} instance
|
||||
*/
|
||||
@Bean
|
||||
@ConditionalOnBean(value = {GuidCreator.class}, name = "jtiCreator")
|
||||
public TokenResolver<DecodedJWT> tokenResolver() {
|
||||
log.debug("Creating bean TokenResolver<DecodedJWT>.");
|
||||
return new AuthzeroTokenResolver(
|
||||
jtiCreator,
|
||||
simpleJwtProperties.algorithm(),
|
||||
|
||||
+5
-1
@@ -18,10 +18,13 @@
|
||||
package cn.org.codecrafters.simplejwt.autoconfiguration;
|
||||
|
||||
import cn.org.codecrafters.guid.GuidCreator;
|
||||
import cn.org.codecrafters.simplejwt.autoconfiguration.conditions.GuidCreatorCondition;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.boot.autoconfigure.AutoConfiguration;
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
|
||||
import org.springframework.boot.autoconfigure.condition.SearchStrategy;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Conditional;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
@@ -32,11 +35,12 @@ import java.util.UUID;
|
||||
*/
|
||||
@Slf4j
|
||||
@AutoConfiguration
|
||||
@ConditionalOnMissingBean(value = GuidCreator.class, name = "jtiCreator")
|
||||
public class GuidAutoConfiguration {
|
||||
|
||||
@Bean
|
||||
@Conditional(GuidCreatorCondition.class)
|
||||
public GuidCreator<?> jtiCreator() {
|
||||
log.debug("[GuidAutoConfiguration] --- Initializing default jtiCreator.");
|
||||
return UUID::randomUUID;
|
||||
}
|
||||
|
||||
|
||||
+3
-1
@@ -27,6 +27,7 @@ import io.jsonwebtoken.Jws;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.boot.autoconfigure.AutoConfiguration;
|
||||
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
|
||||
@@ -63,6 +64,8 @@ import org.springframework.context.annotation.Bean;
|
||||
@EnableConfigurationProperties(value = {SimpleJwtProperties.class})
|
||||
@ConditionalOnClass({Jws.class, Claims.class, JjwtTokenResolver.class})
|
||||
@ConditionalOnMissingBean({TokenResolver.class})
|
||||
@ConditionalOnBean(value = {GuidCreator.class}, name = "jtiCreator")
|
||||
@AutoConfigureAfter(value = GuidAutoConfiguration.class)
|
||||
public class JjwtTokenResolverAutoConfiguration {
|
||||
|
||||
/**
|
||||
@@ -98,7 +101,6 @@ public class JjwtTokenResolverAutoConfiguration {
|
||||
* @return the {@link TokenResolver} instance
|
||||
*/
|
||||
@Bean
|
||||
@ConditionalOnBean(value = {GuidCreator.class}, name = "jtiCreator")
|
||||
public TokenResolver<Jws<Claims>> tokenResolver() {
|
||||
return new JjwtTokenResolver(
|
||||
jtiCreator,
|
||||
|
||||
+34
@@ -0,0 +1,34 @@
|
||||
package cn.org.codecrafters.simplejwt.autoconfiguration.conditions;
|
||||
|
||||
import cn.org.codecrafters.guid.GuidCreator;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.context.annotation.Condition;
|
||||
import org.springframework.context.annotation.ConditionContext;
|
||||
import org.springframework.core.type.AnnotatedTypeMetadata;
|
||||
|
||||
import java.util.Objects;
|
||||
|
||||
/**
|
||||
* GuidCreatorCondition
|
||||
* <p>
|
||||
* Created on 28 Aug 2023
|
||||
*
|
||||
* @author Zihlu Wang
|
||||
*/
|
||||
@Slf4j
|
||||
public class GuidCreatorCondition implements Condition {
|
||||
@Override
|
||||
public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
|
||||
log.debug("[GuidCreatorCondition] --- Detecting bean jtiCreator.");
|
||||
final var beanFactory = Objects.requireNonNull(context.getBeanFactory());
|
||||
var isContainJtiCreator = beanFactory.containsBean("jtiCreator");
|
||||
log.debug("[GuidCreatorCondition] --- Bean jtiCreator {} been created.", isContainJtiCreator ? "has" : "has not");
|
||||
if (isContainJtiCreator) {
|
||||
var result = !(beanFactory.getBean("jtiCreator") instanceof GuidCreator<?>);
|
||||
log.debug("[GuidCreatorCondition] --- Create jtiCreator now? {}.", result ? "yes" : "no");
|
||||
return result;
|
||||
}
|
||||
log.debug("[GuidCreatorCondition] --- Condition passed.");
|
||||
return true;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user