sa-token-solon-plugin 优化 sa-sso 适配,保持与 spirngboot 类似的适配体验

This commit is contained in:
noear 2025-02-25 17:01:04 +08:00
parent 561c40c3ba
commit 028a79abd8
4 changed files with 149 additions and 74 deletions

View File

@ -19,7 +19,8 @@ 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 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;
@ -42,7 +43,8 @@ public class SaSolonPlugin implements Plugin {
context.beanMake(SaBeanInject.class);
//sa-sso
context.beanMake(SaSsoAutoConfigure.class);
context.beanMake(SaSsoBeanRegister.class);
context.beanMake(SaSsoBeanInject.class);
//sa-oauth2
context.beanMake(SaOAuth2AutoConfigure.class);

View File

@ -1,72 +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.sso;
import cn.dev33.satoken.sso.SaSsoManager;
import cn.dev33.satoken.sso.config.SaSsoClientConfig;
import cn.dev33.satoken.sso.config.SaSsoServerConfig;
import cn.dev33.satoken.sso.processor.SaSsoClientProcessor;
import cn.dev33.satoken.sso.processor.SaSsoServerProcessor;
import cn.dev33.satoken.sso.template.SaSsoClientTemplate;
import cn.dev33.satoken.sso.template.SaSsoServerTemplate;
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 = SaSsoManager.class)
@Configuration
public class SaSsoAutoConfigure {
@Condition(onBean = SaSsoServerTemplate.class)
@Bean
public void serverTemplate(SaSsoServerTemplate bean) {
SaSsoServerProcessor.instance.ssoServerTemplate = bean;
}
@Condition(onBean = SaSsoClientTemplate.class)
@Bean
public void clientTemplate(SaSsoClientTemplate bean) {
SaSsoClientProcessor.instance.ssoClientTemplate = bean;
}
/**
* 获取 SSO Server 配置Bean
*/
@Bean
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 clientConfig) {
if (clientConfig != null) {
SaSsoManager.setClientConfig(clientConfig);
}
return clientConfig;
}
}

View File

@ -0,0 +1,82 @@
/*
* 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.sso;
import cn.dev33.satoken.sso.SaSsoManager;
import cn.dev33.satoken.sso.config.SaSsoClientConfig;
import cn.dev33.satoken.sso.config.SaSsoServerConfig;
import cn.dev33.satoken.sso.processor.SaSsoClientProcessor;
import cn.dev33.satoken.sso.processor.SaSsoServerProcessor;
import cn.dev33.satoken.sso.template.SaSsoClientTemplate;
import cn.dev33.satoken.sso.template.SaSsoServerTemplate;
import org.noear.solon.annotation.Bean;
import org.noear.solon.annotation.Condition;
import org.noear.solon.annotation.Configuration;
/**
* 注入 Sa-Token SSO 所需要的 Bean
*
* @author click33
* @since 1.34.0
*/
@Condition(onClass=SaSsoManager.class)
@Configuration
public class SaSsoBeanInject {
/**
* 注入 Sa-Token SSO Server 配置类
*
* @param serverConfig 配置对象
*/
@Condition(onBean = SaSsoServerConfig.class)
@Bean
public void setSaSsoServerConfig(SaSsoServerConfig serverConfig) {
SaSsoManager.setServerConfig(serverConfig);
}
/**
* 注入 Sa-Token SSO Client 配置类
*
* @param clientConfig 配置对象
*/
@Condition(onBean = SaSsoClientConfig.class)
@Bean
public void setSaSsoClientConfig(SaSsoClientConfig clientConfig) {
SaSsoManager.setClientConfig(clientConfig);
}
/**
* 注入 SSO 模板代码类 (Server )
*
* @param ssoServerTemplate /
*/
@Condition(onBean = SaSsoServerTemplate.class)
@Bean
public void setSaSsoServerTemplate(SaSsoServerTemplate ssoServerTemplate) {
SaSsoServerProcessor.instance.ssoServerTemplate = ssoServerTemplate;
}
/**
* 注入 SSO 模板代码类 (Client )
*
* @param ssoClientTemplate /
*/
@Condition(onBean = SaSsoClientTemplate.class)
@Bean
public void setSaSsoClientTemplate(SaSsoClientTemplate ssoClientTemplate) {
SaSsoClientProcessor.instance.ssoClientTemplate = ssoClientTemplate;
}
}

View File

@ -0,0 +1,63 @@
/*
* 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.sso;
import cn.dev33.satoken.sso.SaSsoManager;
import cn.dev33.satoken.sso.config.SaSsoClientConfig;
import cn.dev33.satoken.sso.config.SaSsoServerConfig;
import org.noear.solon.annotation.Bean;
import org.noear.solon.annotation.Condition;
import org.noear.solon.annotation.Configuration;
import org.noear.solon.annotation.Inject;
/**
* 注册 Sa-Token SSO 所需要的 Bean
*
* @author click33
* @since 1.34.0
*/
@Condition(onClass=SaSsoManager.class)
@Configuration
public class SaSsoBeanRegister {
/**
* 获取 SSO Server 配置对象
*
* @return 配置对象
*/
@Bean
public SaSsoServerConfig getSaSsoServerConfig(@Inject(value = "${sa-token.sso-server)", required = false) SaSsoServerConfig serverConfig) {
if (serverConfig == null) {
return new SaSsoServerConfig();
} else {
return serverConfig;
}
}
/**
* 获取 SSO Client 配置对象
*
* @return 配置对象
*/
@Bean
public SaSsoClientConfig getSaSsoClientConfig(@Inject(value = "${sa-token.sso-client}", required = false) SaSsoClientConfig clientConfig) {
if (clientConfig == null) {
return new SaSsoClientConfig();
} else {
return clientConfig;
}
}
}