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(List Bean 的注册与注入应该分开在两个文件中,否则在某些场景下会造成循环依赖
+ * @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..ea8e9bbb
--- /dev/null
+++ b/sa-token-starter/sa-token-solon-plugin/src/main/java/cn/dev33/satoken/solon/SaSolonPlugin.java
@@ -0,0 +1,54 @@
+/*
+ * 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.SaOAuth2BeanInject;
+import cn.dev33.satoken.solon.oauth2.SaOAuth2BeanRegister;
+import cn.dev33.satoken.solon.sso.SaSsoBeanInject;
+import cn.dev33.satoken.solon.sso.SaSsoBeanRegister;
+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(SaSsoBeanRegister.class);
+ context.beanMake(SaSsoBeanInject.class);
+
+ //sa-oauth2
+ context.beanMake(SaOAuth2BeanRegister.class);
+ context.beanMake(SaOAuth2BeanInject.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
deleted file mode 100644
index d0d7ee45..00000000
--- a/sa-token-starter/sa-token-solon-plugin/src/main/java/cn/dev33/satoken/solon/oauth2/SaOAuth2AutoConfigure.java
+++ /dev/null
@@ -1,53 +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.oauth2;
-
-import cn.dev33.satoken.oauth2.SaOAuth2Manager;
-import cn.dev33.satoken.oauth2.config.SaOAuth2ServerConfig;
-import cn.dev33.satoken.oauth2.template.SaOAuth2Template;
-import org.noear.solon.annotation.Bean;
-import org.noear.solon.annotation.Condition;
-import org.noear.solon.annotation.Configuration;
-import org.noear.solon.annotation.Inject;
-import org.noear.solon.core.AppContext;
-
-/**
- * @author noear
- * @since 2.0
- */
-
-@Condition(onClass = SaOAuth2Manager.class)
-@Configuration
-public class SaOAuth2AutoConfigure {
- @Bean
- public void init(AppContext appContext) throws Throwable {
- appContext.subBeansOfType(SaOAuth2Template.class, bean -> {
- SaOAuth2Manager.setTemplate(bean);
- });
-
- appContext.subBeansOfType(SaOAuth2ServerConfig.class, bean -> {
- SaOAuth2Manager.setServerConfig(bean);
- });
- }
-
- /**
- * 获取 OAuth2配置Bean
- */
- @Bean
- public SaOAuth2ServerConfig getConfig(@Inject(value = "${sa-token.oauth2-server}", required = false) SaOAuth2ServerConfig oAuth2Config) {
- return oAuth2Config;
- }
-}
\ No newline at end of file
diff --git a/sa-token-starter/sa-token-solon-plugin/src/main/java/cn/dev33/satoken/solon/oauth2/SaOAuth2BeanInject.java b/sa-token-starter/sa-token-solon-plugin/src/main/java/cn/dev33/satoken/solon/oauth2/SaOAuth2BeanInject.java
new file mode 100644
index 00000000..e4c56f52
--- /dev/null
+++ b/sa-token-starter/sa-token-solon-plugin/src/main/java/cn/dev33/satoken/solon/oauth2/SaOAuth2BeanInject.java
@@ -0,0 +1,162 @@
+/*
+ * 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.oauth2;
+
+import cn.dev33.satoken.oauth2.SaOAuth2Manager;
+import cn.dev33.satoken.oauth2.config.SaOAuth2ServerConfig;
+import cn.dev33.satoken.oauth2.dao.SaOAuth2Dao;
+import cn.dev33.satoken.oauth2.data.convert.SaOAuth2DataConverter;
+import cn.dev33.satoken.oauth2.data.generate.SaOAuth2DataGenerate;
+import cn.dev33.satoken.oauth2.data.loader.SaOAuth2DataLoader;
+import cn.dev33.satoken.oauth2.data.resolver.SaOAuth2DataResolver;
+import cn.dev33.satoken.oauth2.granttype.handler.SaOAuth2GrantTypeHandlerInterface;
+import cn.dev33.satoken.oauth2.processor.SaOAuth2ServerProcessor;
+import cn.dev33.satoken.oauth2.scope.handler.SaOAuth2ScopeHandlerInterface;
+import cn.dev33.satoken.oauth2.strategy.SaOAuth2Strategy;
+import cn.dev33.satoken.oauth2.template.SaOAuth2Template;
+import org.noear.solon.annotation.Bean;
+import org.noear.solon.annotation.Condition;
+import org.noear.solon.annotation.Configuration;
+
+import java.util.List;
+
+
+// 小提示:如果你在 idea 中运行源码时出现异常:java: 程序包cn.dev33.satoken.oauth2不存在。
+// 在项目根目录进入 cmd,执行 mvn package 即可解决
+
+
+/**
+ * 注入 Sa-Token-OAuth2 所需要的组件
+ *
+ * @author click33
+ * @since 1.34.0
+ */
+@Condition(onClass=SaOAuth2Manager.class)
+@Configuration
+public class SaOAuth2BeanInject {
+
+ /**
+ * 注入 OAuth2 配置对象
+ *
+ * @param saOAuth2Config 配置对象
+ */
+ @Condition(onBean = SaOAuth2ServerConfig.class)
+ @Bean
+ public void setSaOAuth2Config(SaOAuth2ServerConfig saOAuth2Config) {
+ SaOAuth2Manager.setServerConfig(saOAuth2Config);
+ }
+
+ /**
+ * 注入 OAuth2 模板代码类
+ *
+ * @param saOAuth2Template 模板代码类
+ */
+ @Condition(onBean = SaOAuth2Template.class)
+ @Bean
+ public void setSaOAuth2Template(SaOAuth2Template saOAuth2Template) {
+ SaOAuth2Manager.setTemplate(saOAuth2Template);
+ }
+
+ /**
+ * 注入 OAuth2 请求处理器
+ *
+ * @param serverProcessor 请求处理器
+ */
+ @Condition(onBean = SaOAuth2ServerProcessor.class)
+ @Bean
+ public void setSaOAuth2Template(SaOAuth2ServerProcessor serverProcessor) {
+ SaOAuth2ServerProcessor.instance = serverProcessor;
+ }
+
+ /**
+ * 注入 OAuth2 数据加载器
+ *
+ * @param dataLoader /
+ */
+ @Condition(onBean = SaOAuth2DataLoader.class)
+ @Bean
+ public void setSaOAuth2DataLoader(SaOAuth2DataLoader dataLoader) {
+ SaOAuth2Manager.setDataLoader(dataLoader);
+ }
+
+ /**
+ * 注入 OAuth2 数据解析器 Bean
+ *
+ * @param dataResolver /
+ */
+ @Condition(onBean = SaOAuth2DataResolver.class)
+ @Bean
+ public void setSaOAuth2DataResolver(SaOAuth2DataResolver dataResolver) {
+ SaOAuth2Manager.setDataResolver(dataResolver);
+ }
+
+ /**
+ * 注入 OAuth2 数据格式转换器 Bean
+ *
+ * @param dataConverter /
+ */
+ @Condition(onBean = SaOAuth2DataConverter.class)
+ @Bean
+ public void setSaOAuth2DataConverter(SaOAuth2DataConverter dataConverter) {
+ SaOAuth2Manager.setDataConverter(dataConverter);
+ }
+
+ /**
+ * 注入 OAuth2 数据构建器 Bean
+ *
+ * @param dataGenerate /
+ */
+ @Condition(onBean = SaOAuth2DataGenerate.class)
+ @Bean
+ public void setSaOAuth2DataGenerate(SaOAuth2DataGenerate dataGenerate) {
+ SaOAuth2Manager.setDataGenerate(dataGenerate);
+ }
+
+ /**
+ * 注入 OAuth2 数据持久 Bean
+ *
+ * @param dao /
+ */
+ @Condition(onBean = SaOAuth2Dao.class)
+ @Bean
+ public void setSaOAuth2Dao(SaOAuth2Dao dao) {
+ SaOAuth2Manager.setDao(dao);
+ }
+
+ /**
+ * 注入自定义 scope 处理器
+ *
+ * @param handlerList 自定义 scope 处理器集合
+ */
+ @Bean
+ public void setSaOAuth2ScopeHandler(List