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 lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.boot.autoconfigure.AutoConfiguration;
|
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.ConditionalOnBean;
|
||||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
|
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
|
||||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
|
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
|
||||||
import org.springframework.boot.context.properties.EnableConfigurationProperties;
|
import org.springframework.boot.context.properties.EnableConfigurationProperties;
|
||||||
import org.springframework.context.annotation.Bean;
|
import org.springframework.context.annotation.Bean;
|
||||||
|
import org.springframework.context.annotation.DependsOn;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <p>
|
* <p>
|
||||||
@@ -61,6 +63,8 @@ import org.springframework.context.annotation.Bean;
|
|||||||
@EnableConfigurationProperties(value = {SimpleJwtProperties.class})
|
@EnableConfigurationProperties(value = {SimpleJwtProperties.class})
|
||||||
@ConditionalOnClass({DecodedJWT.class, AuthzeroTokenResolver.class})
|
@ConditionalOnClass({DecodedJWT.class, AuthzeroTokenResolver.class})
|
||||||
@ConditionalOnMissingBean({TokenResolver.class})
|
@ConditionalOnMissingBean({TokenResolver.class})
|
||||||
|
@ConditionalOnBean(value = {GuidCreator.class}, name = "jtiCreator")
|
||||||
|
@AutoConfigureAfter(value = GuidAutoConfiguration.class)
|
||||||
public class AuthzeroTokenResolverAutoConfiguration {
|
public class AuthzeroTokenResolverAutoConfiguration {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -96,8 +100,8 @@ public class AuthzeroTokenResolverAutoConfiguration {
|
|||||||
* @return the {@link TokenResolver} instance
|
* @return the {@link TokenResolver} instance
|
||||||
*/
|
*/
|
||||||
@Bean
|
@Bean
|
||||||
@ConditionalOnBean(value = {GuidCreator.class}, name = "jtiCreator")
|
|
||||||
public TokenResolver<DecodedJWT> tokenResolver() {
|
public TokenResolver<DecodedJWT> tokenResolver() {
|
||||||
|
log.debug("Creating bean TokenResolver<DecodedJWT>.");
|
||||||
return new AuthzeroTokenResolver(
|
return new AuthzeroTokenResolver(
|
||||||
jtiCreator,
|
jtiCreator,
|
||||||
simpleJwtProperties.algorithm(),
|
simpleJwtProperties.algorithm(),
|
||||||
|
|||||||
+5
-1
@@ -18,10 +18,13 @@
|
|||||||
package cn.org.codecrafters.simplejwt.autoconfiguration;
|
package cn.org.codecrafters.simplejwt.autoconfiguration;
|
||||||
|
|
||||||
import cn.org.codecrafters.guid.GuidCreator;
|
import cn.org.codecrafters.guid.GuidCreator;
|
||||||
|
import cn.org.codecrafters.simplejwt.autoconfiguration.conditions.GuidCreatorCondition;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.boot.autoconfigure.AutoConfiguration;
|
import org.springframework.boot.autoconfigure.AutoConfiguration;
|
||||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
|
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.Bean;
|
||||||
|
import org.springframework.context.annotation.Conditional;
|
||||||
|
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
@@ -32,11 +35,12 @@ import java.util.UUID;
|
|||||||
*/
|
*/
|
||||||
@Slf4j
|
@Slf4j
|
||||||
@AutoConfiguration
|
@AutoConfiguration
|
||||||
@ConditionalOnMissingBean(value = GuidCreator.class, name = "jtiCreator")
|
|
||||||
public class GuidAutoConfiguration {
|
public class GuidAutoConfiguration {
|
||||||
|
|
||||||
@Bean
|
@Bean
|
||||||
|
@Conditional(GuidCreatorCondition.class)
|
||||||
public GuidCreator<?> jtiCreator() {
|
public GuidCreator<?> jtiCreator() {
|
||||||
|
log.debug("[GuidAutoConfiguration] --- Initializing default jtiCreator.");
|
||||||
return UUID::randomUUID;
|
return UUID::randomUUID;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+3
-1
@@ -27,6 +27,7 @@ import io.jsonwebtoken.Jws;
|
|||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.boot.autoconfigure.AutoConfiguration;
|
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.ConditionalOnBean;
|
||||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
|
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
|
||||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
|
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
|
||||||
@@ -63,6 +64,8 @@ import org.springframework.context.annotation.Bean;
|
|||||||
@EnableConfigurationProperties(value = {SimpleJwtProperties.class})
|
@EnableConfigurationProperties(value = {SimpleJwtProperties.class})
|
||||||
@ConditionalOnClass({Jws.class, Claims.class, JjwtTokenResolver.class})
|
@ConditionalOnClass({Jws.class, Claims.class, JjwtTokenResolver.class})
|
||||||
@ConditionalOnMissingBean({TokenResolver.class})
|
@ConditionalOnMissingBean({TokenResolver.class})
|
||||||
|
@ConditionalOnBean(value = {GuidCreator.class}, name = "jtiCreator")
|
||||||
|
@AutoConfigureAfter(value = GuidAutoConfiguration.class)
|
||||||
public class JjwtTokenResolverAutoConfiguration {
|
public class JjwtTokenResolverAutoConfiguration {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -98,7 +101,6 @@ public class JjwtTokenResolverAutoConfiguration {
|
|||||||
* @return the {@link TokenResolver} instance
|
* @return the {@link TokenResolver} instance
|
||||||
*/
|
*/
|
||||||
@Bean
|
@Bean
|
||||||
@ConditionalOnBean(value = {GuidCreator.class}, name = "jtiCreator")
|
|
||||||
public TokenResolver<Jws<Claims>> tokenResolver() {
|
public TokenResolver<Jws<Claims>> tokenResolver() {
|
||||||
return new JjwtTokenResolver(
|
return new JjwtTokenResolver(
|
||||||
jtiCreator,
|
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