diff --git a/sa-token-starter/sa-token-solon-plugin/src/main/java/cn/dev33/satoken/solon/SaBeanInject.java b/sa-token-starter/sa-token-solon-plugin/src/main/java/cn/dev33/satoken/solon/SaBeanInject.java index 1696dc94..5c8247df 100644 --- a/sa-token-starter/sa-token-solon-plugin/src/main/java/cn/dev33/satoken/solon/SaBeanInject.java +++ b/sa-token-starter/sa-token-solon-plugin/src/main/java/cn/dev33/satoken/solon/SaBeanInject.java @@ -43,7 +43,7 @@ import org.noear.solon.annotation.*; import java.util.List; /** - * 注入 Sa-Token 所需要的 Bean //todo: 再去插件添加:context.beanMake(SaBeanInject.class); + * 注入 Sa-Token 所需要的 Bean * * @author click33 * @since 1.34.0 @@ -52,22 +52,22 @@ import java.util.List; public class SaBeanInject { /** - * 组件注入 - *
为确保 Log 组件正常打印,必须将 SaLog 和 SaTokenConfig 率先初始化
- * - * @param log log 对象 + * 组件注入 + *为确保 Log 组件正常打印,必须将 SaLog 和 SaTokenConfig 率先初始化
+ * + * @param log log 对象 * @param saTokenConfig 配置对象 */ public SaBeanInject( @Inject(required = false) SaLog log, @Inject(required = false) SaTokenConfig saTokenConfig, @Inject(required = false) SaTokenPluginHolder pluginHolder - ){ - if(log != null) { + ) { + if (log != null) { SaManager.setLog(log); } - if(saTokenConfig != null) { + if (saTokenConfig != null) { SaManager.setConfig(saTokenConfig); } @@ -78,11 +78,11 @@ public class SaBeanInject { pluginHolder.init(); SaTokenPluginHolder.instance = pluginHolder; } - + /** * 注入持久化Bean - * - * @param saTokenDao SaTokenDao对象 + * + * @param saTokenDao SaTokenDao对象 */ @Condition(onBean = SaTokenDao.class) @Bean @@ -92,8 +92,8 @@ public class SaBeanInject { /** * 注入权限认证Bean - * - * @param stpInterface StpInterface对象 + * + * @param stpInterface StpInterface对象 */ @Condition(onBean = StpInterface.class) @Bean @@ -103,8 +103,8 @@ public class SaBeanInject { /** * 注入上下文Bean - * - * @param saTokenContext SaTokenContext对象 + * + * @param saTokenContext SaTokenContext对象 */ @Condition(onBean = SaTokenContext.class) @Bean @@ -114,8 +114,8 @@ public class SaBeanInject { /** * 注入二级上下文Bean - * - * @param saTokenSecondContextCreator 二级上下文创建器 + * + * @param saTokenSecondContextCreator 二级上下文创建器 */ @Condition(onBean = SaTokenSecondContextCreator.class) @Bean @@ -125,8 +125,8 @@ public class SaBeanInject { /** * 注入侦听器Bean - * - * @param listenerList 侦听器集合 + * + * @param listenerList 侦听器集合 */ @Bean public void setSaTokenListener(ListBean 的注册与注入应该分开在两个文件中,否则在某些场景下会造成循环依赖 + * @author click33 + * + */ +@Configuration +public class SaBeanRegister { + /** + * 获取配置Bean + * + * @return 配置对象 + */ + @Bean + public SaTokenConfig getSaTokenConfig(@Inject(value = "${sa-token}", required = false) SaTokenConfig config) { + if (config == null) { + return new SaTokenConfig(); + } else { + return config; + } + } +} diff --git a/sa-token-starter/sa-token-solon-plugin/src/main/java/cn/dev33/satoken/solon/SaSolonPlugin.java b/sa-token-starter/sa-token-solon-plugin/src/main/java/cn/dev33/satoken/solon/SaSolonPlugin.java new file mode 100644 index 00000000..cd3caeb4 --- /dev/null +++ b/sa-token-starter/sa-token-solon-plugin/src/main/java/cn/dev33/satoken/solon/SaSolonPlugin.java @@ -0,0 +1,50 @@ +/* + * Copyright 2020-2099 sa-token.cc + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package cn.dev33.satoken.solon; + +import cn.dev33.satoken.SaManager; +import cn.dev33.satoken.solon.json.SaJsonTemplateForSnack3; +import cn.dev33.satoken.solon.model.SaContextForSolon; +import cn.dev33.satoken.solon.oauth2.SaOAuth2AutoConfigure; +import cn.dev33.satoken.solon.sso.SaSsoAutoConfigure; +import org.noear.solon.core.AppContext; +import org.noear.solon.core.Plugin; + +/** + * @author noear + * @since 1.4 + */ +public class SaSolonPlugin implements Plugin { + + @Override + public void start(AppContext context) { + // 注入上下文Bean + SaManager.setSaTokenContext(new SaContextForSolon()); + + // 注入JSON解析器Bean + SaManager.setSaJsonTemplate(new SaJsonTemplateForSnack3()); + + //sa-token + context.beanMake(SaBeanRegister.class); + context.beanMake(SaBeanInject.class); + + //sa-sso + context.beanMake(SaSsoAutoConfigure.class); + + //sa-oauth2 + context.beanMake(SaOAuth2AutoConfigure.class); + } +} \ No newline at end of file diff --git a/sa-token-starter/sa-token-solon-plugin/src/main/java/cn/dev33/satoken/solon/XPluginImp.java b/sa-token-starter/sa-token-solon-plugin/src/main/java/cn/dev33/satoken/solon/XPluginImp.java deleted file mode 100644 index c44bdb93..00000000 --- a/sa-token-starter/sa-token-solon-plugin/src/main/java/cn/dev33/satoken/solon/XPluginImp.java +++ /dev/null @@ -1,152 +0,0 @@ -/* - * Copyright 2020-2099 sa-token.cc - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package cn.dev33.satoken.solon; - -import cn.dev33.satoken.SaManager; -import cn.dev33.satoken.annotation.handler.SaAnnotationHandlerInterface; -import cn.dev33.satoken.config.SaTokenConfig; -import cn.dev33.satoken.context.second.SaTokenSecondContextCreator; -import cn.dev33.satoken.dao.SaTokenDao; -import cn.dev33.satoken.httpauth.basic.SaHttpBasicTemplate; -import cn.dev33.satoken.httpauth.basic.SaHttpBasicUtil; -import cn.dev33.satoken.httpauth.digest.SaHttpDigestTemplate; -import cn.dev33.satoken.httpauth.digest.SaHttpDigestUtil; -import cn.dev33.satoken.json.SaJsonTemplate; -import cn.dev33.satoken.listener.SaTokenEventCenter; -import cn.dev33.satoken.listener.SaTokenListener; -import cn.dev33.satoken.log.SaLog; -import cn.dev33.satoken.same.SaSameTemplate; -import cn.dev33.satoken.serializer.SaSerializerTemplate; -import cn.dev33.satoken.sign.SaSignTemplate; -import cn.dev33.satoken.solon.json.SaJsonTemplateForSnack3; -import cn.dev33.satoken.solon.model.SaContextForSolon; -import cn.dev33.satoken.solon.oauth2.SaOAuth2AutoConfigure; -import cn.dev33.satoken.solon.sso.SaSsoAutoConfigure; -import cn.dev33.satoken.stp.StpInterface; -import cn.dev33.satoken.stp.StpLogic; -import cn.dev33.satoken.stp.StpUtil; -import cn.dev33.satoken.strategy.SaAnnotationStrategy; -import cn.dev33.satoken.temp.SaTempInterface; -import org.noear.solon.Solon; -import org.noear.solon.core.AppContext; -import org.noear.solon.core.Plugin; - -/** - * @author noear - * @since 1.4 - */ -public class XPluginImp implements Plugin { - - @Override - public void start(AppContext context) { - context.beanMake(SaSsoAutoConfigure.class); - context.beanMake(SaOAuth2AutoConfigure.class); - - //context.beanMake(SaBeanInject.class); //暂进未启用 - - // 注入上下文Bean - SaManager.setSaTokenContext(new SaContextForSolon()); - - // 注入JSON解析器Bean - SaManager.setSaJsonTemplate(new SaJsonTemplateForSnack3()); - - //注入配置Bean - SaTokenConfig saTokenConfig = Solon.cfg().getBean("sa-token", SaTokenConfig.class); - if (saTokenConfig != null) { - SaManager.setConfig(saTokenConfig); - } - - // Sa-Token 日志输出 Bean - context.getBeanAsync(SaLog.class, bean -> { - SaManager.setLog(bean); - }); - - //注入 SaTokenConfig - context.getBeanAsync(SaTokenConfig.class, bean -> { - SaManager.setConfig(bean); - }); - - // 注入Dao Bean - context.getBeanAsync(SaTokenDao.class, bean -> { - SaManager.setSaTokenDao(bean); - }); - - // 注入二级上下文 Bean - context.getBeanAsync(SaTokenSecondContextCreator.class, bean -> { - SaManager.setSaTokenSecondContext(bean.create()); - }); - - // 注入侦听器 Bean (可以有多个) - context.subBeansOfType(SaTokenListener.class, sl -> { - SaTokenEventCenter.registerListener(sl); - }); - - // 注入自定义注解处理器 Bean (可以有多个) - context.subBeansOfType(SaAnnotationHandlerInterface.class, sl -> { - SaAnnotationStrategy.instance.registerAnnotationHandler(sl); - }); - - // 注入权限认证 Bean - context.getBeanAsync(StpInterface.class, bean -> { - SaManager.setStpInterface(bean); - }); - - // 注入持久化 Bean - context.getBeanAsync(SaTokenDao.class, bean -> { - SaManager.setSaTokenDao(bean); - }); - - // 临时令牌验证模块 Bean - context.getBeanAsync(SaTempInterface.class, bean -> { - SaManager.setSaTemp(bean); - }); - - // Sa-Token Same-Token 模块 Bean - context.getBeanAsync(SaSameTemplate.class, bean -> { - SaManager.setSaSameTemplate(bean); - }); - - // Sa-Token Http Basic 认证模块 Bean - context.getBeanAsync(SaHttpBasicTemplate.class, bean -> { - SaHttpBasicUtil.saHttpBasicTemplate = bean; - }); - - // Sa-Token Http Digest 认证模块 Bean - context.getBeanAsync(SaHttpDigestTemplate.class, bean -> { - SaHttpDigestUtil.saHttpDigestTemplate = bean; - }); - - // Sa-Token JSON 转换器 Bean - context.getBeanAsync(SaJsonTemplate.class, bean -> { - SaManager.setSaJsonTemplate(bean); - }); - - // Sa-Token 序列化器 Bean - context.getBeanAsync(SaSerializerTemplate.class, bean -> { - SaManager.setSaSerializerTemplate(bean); - }); - - // Sa-Token 参数签名算法 Bean - context.getBeanAsync(SaSignTemplate.class, bean -> { - SaManager.setSaSignTemplate(bean); - }); - - // 自定义 StpLogic 对象 //容器层面只能有一个;要多个得自己在Util上处理 - context.getBeanAsync(StpLogic.class, bean -> { - StpUtil.setStpLogic(bean); - }); - } -} \ No newline at end of file diff --git a/sa-token-starter/sa-token-solon-plugin/src/main/java/cn/dev33/satoken/solon/oauth2/SaOAuth2AutoConfigure.java b/sa-token-starter/sa-token-solon-plugin/src/main/java/cn/dev33/satoken/solon/oauth2/SaOAuth2AutoConfigure.java index d0d7ee45..0bb9b95d 100644 --- a/sa-token-starter/sa-token-solon-plugin/src/main/java/cn/dev33/satoken/solon/oauth2/SaOAuth2AutoConfigure.java +++ b/sa-token-starter/sa-token-solon-plugin/src/main/java/cn/dev33/satoken/solon/oauth2/SaOAuth2AutoConfigure.java @@ -32,22 +32,21 @@ import org.noear.solon.core.AppContext; @Condition(onClass = SaOAuth2Manager.class) @Configuration public class SaOAuth2AutoConfigure { + @Condition(onBean = SaOAuth2Template.class) @Bean - public void init(AppContext appContext) throws Throwable { - appContext.subBeansOfType(SaOAuth2Template.class, bean -> { - SaOAuth2Manager.setTemplate(bean); - }); - - appContext.subBeansOfType(SaOAuth2ServerConfig.class, bean -> { - SaOAuth2Manager.setServerConfig(bean); - }); + public void template(SaOAuth2Template bean) throws Throwable { + SaOAuth2Manager.setTemplate(bean); } /** * 获取 OAuth2配置Bean */ @Bean - public SaOAuth2ServerConfig getConfig(@Inject(value = "${sa-token.oauth2-server}", required = false) SaOAuth2ServerConfig oAuth2Config) { - return oAuth2Config; + public SaOAuth2ServerConfig getConfig(@Inject(value = "${sa-token.oauth2-server}", required = false) SaOAuth2ServerConfig serverConfig) { + if (serverConfig != null) { + SaOAuth2Manager.setServerConfig(serverConfig); + } + + return serverConfig; } } \ No newline at end of file diff --git a/sa-token-starter/sa-token-solon-plugin/src/main/java/cn/dev33/satoken/solon/sso/SaSsoAutoConfigure.java b/sa-token-starter/sa-token-solon-plugin/src/main/java/cn/dev33/satoken/solon/sso/SaSsoAutoConfigure.java index e625393f..d14f33af 100644 --- a/sa-token-starter/sa-token-solon-plugin/src/main/java/cn/dev33/satoken/solon/sso/SaSsoAutoConfigure.java +++ b/sa-token-starter/sa-token-solon-plugin/src/main/java/cn/dev33/satoken/solon/sso/SaSsoAutoConfigure.java @@ -36,36 +36,37 @@ import org.noear.solon.core.AppContext; @Condition(onClass = SaSsoManager.class) @Configuration public class SaSsoAutoConfigure { + @Condition(onBean = SaSsoServerTemplate.class) @Bean - public void init(AppContext appContext) throws Throwable { - appContext.subBeansOfType(SaSsoServerTemplate.class, bean -> { - SaSsoServerProcessor.instance.ssoServerTemplate = bean; - }); - appContext.subBeansOfType(SaSsoClientTemplate.class, bean -> { - SaSsoClientProcessor.instance.ssoClientTemplate = bean; - }); + public void serverTemplate(SaSsoServerTemplate bean) { + SaSsoServerProcessor.instance.ssoServerTemplate = bean; + } - appContext.subBeansOfType(SaSsoServerConfig.class, bean -> { - SaSsoManager.setServerConfig(bean); - }); - appContext.subBeansOfType(SaSsoClientConfig.class, bean -> { - SaSsoManager.setClientConfig(bean); - }); + @Condition(onBean = SaSsoClientTemplate.class) + @Bean + public void clientTemplate(SaSsoClientTemplate bean) { + SaSsoClientProcessor.instance.ssoClientTemplate = bean; } /** * 获取 SSO Server 配置Bean */ @Bean - public SaSsoServerConfig getConfig(@Inject(value = "${sa-token.sso-server}", required = false) SaSsoServerConfig ssoConfig) { - return ssoConfig; + public SaSsoServerConfig getServerConfig(@Inject(value = "${sa-token.sso-server}", required = false) SaSsoServerConfig serverConfig) { + if (serverConfig != null) { + SaSsoManager.setServerConfig(serverConfig); + } + return serverConfig; } /** * 获取 SSO Client 配置Bean */ @Bean - public SaSsoClientConfig getClientConfig(@Inject(value = "${sa-token.sso-client}", required = false) SaSsoClientConfig ssoConfig) { - return ssoConfig; + public SaSsoClientConfig getClientConfig(@Inject(value = "${sa-token.sso-client}", required = false) SaSsoClientConfig clientConfig) { + if (clientConfig != null) { + SaSsoManager.setClientConfig(clientConfig); + } + return clientConfig; } } \ No newline at end of file diff --git a/sa-token-starter/sa-token-solon-plugin/src/main/resources/META-INF/solon/cn.dev33.satoken.solon.properties b/sa-token-starter/sa-token-solon-plugin/src/main/resources/META-INF/solon/cn.dev33.satoken.solon.properties index 51d8fd9a..ff1011b7 100644 --- a/sa-token-starter/sa-token-solon-plugin/src/main/resources/META-INF/solon/cn.dev33.satoken.solon.properties +++ b/sa-token-starter/sa-token-solon-plugin/src/main/resources/META-INF/solon/cn.dev33.satoken.solon.properties @@ -1 +1 @@ -solon.plugin=cn.dev33.satoken.solon.XPluginImp \ No newline at end of file +solon.plugin=cn.dev33.satoken.solon.SaSolonPlugin \ No newline at end of file