mirror of
http://git.pig4cloud.com/pig/pigx.git
synced 2026-11-08 04:39:00 +08:00
♻️ Refactoring code. #2115 认证中心 和 数据库解耦,通过feign 调用数据源 011d25de6b
This commit is contained in:
1 parent
3306d08819
commit
dbb4ae4373
1 file changed
+70
-6
+70
-6
@@ -1,17 +1,25 @@
|
||||
package com.pig4cloud.pigx.auth.service;
|
||||
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import cn.hutool.core.util.ArrayUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import cn.hutool.json.JSONUtil;
|
||||
import com.pig4cloud.pigx.admin.api.entity.SysOauthClientDetails;
|
||||
import com.pig4cloud.pigx.admin.api.feign.RemoteClientDetailsService;
|
||||
import com.pig4cloud.pigx.common.core.constant.CacheConstants;
|
||||
import com.pig4cloud.pigx.common.core.constant.SecurityConstants;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.beans.BeanUtils;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.cache.annotation.Cacheable;
|
||||
import org.springframework.security.core.authority.AuthorityUtils;
|
||||
import org.springframework.security.oauth2.common.exceptions.InvalidClientException;
|
||||
import org.springframework.security.oauth2.provider.ClientDetails;
|
||||
import org.springframework.security.oauth2.provider.ClientDetailsService;
|
||||
import org.springframework.security.oauth2.provider.client.BaseClientDetails;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.util.StringUtils;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* @author lengleng
|
||||
@@ -19,6 +27,7 @@ import org.springframework.stereotype.Service;
|
||||
* <p>
|
||||
* 扩展 JdbcClientDetailsService 支持多租户
|
||||
*/
|
||||
@Slf4j
|
||||
@Service
|
||||
@RequiredArgsConstructor
|
||||
public class PigxClientDetailsServiceImpl implements ClientDetailsService {
|
||||
@@ -40,12 +49,67 @@ public class PigxClientDetailsServiceImpl implements ClientDetailsService {
|
||||
if (clientDetails == null) {
|
||||
return null;
|
||||
}
|
||||
// 适配成oauth2内置类型
|
||||
return clientDetailsWrapper(clientDetails);
|
||||
}
|
||||
|
||||
// copy原值
|
||||
BaseClientDetails client = new BaseClientDetails();
|
||||
BeanUtils.copyProperties(clientDetails, client);
|
||||
client.setClientSecret(String.format("{noop}%s", clientDetails.getClientSecret()));
|
||||
return client;
|
||||
/**
|
||||
* 客户端类型转化 参考
|
||||
* {@link org.springframework.security.oauth2.provider.client.JdbcClientDetailsService}
|
||||
* @param origin 数据库保存参数
|
||||
* @return target oauth 类型客户端参数
|
||||
*/
|
||||
private ClientDetails clientDetailsWrapper(SysOauthClientDetails origin) {
|
||||
BaseClientDetails target = new BaseClientDetails();
|
||||
// 必选项
|
||||
target.setClientId(origin.getClientId());
|
||||
target.setClientSecret(String.format("{noop}%s", origin.getClientSecret()));
|
||||
|
||||
if (ArrayUtil.isNotEmpty(origin.getAuthorizedGrantTypes())) {
|
||||
target.setAuthorizedGrantTypes(CollUtil.newArrayList(origin.getAuthorizedGrantTypes()));
|
||||
}
|
||||
|
||||
if (StrUtil.isNotBlank(origin.getAuthorities())) {
|
||||
target.setAuthorities(AuthorityUtils.commaSeparatedStringToAuthorityList(origin.getAuthorities()));
|
||||
}
|
||||
|
||||
if (StrUtil.isNotBlank(origin.getResourceIds())) {
|
||||
target.setResourceIds(StringUtils.commaDelimitedListToSet(origin.getResourceIds()));
|
||||
}
|
||||
|
||||
if (StrUtil.isNotBlank(origin.getWebServerRedirectUri())) {
|
||||
target.setRegisteredRedirectUri(StringUtils.commaDelimitedListToSet(origin.getWebServerRedirectUri()));
|
||||
}
|
||||
|
||||
if (StrUtil.isNotBlank(origin.getScope())) {
|
||||
target.setScope(StringUtils.commaDelimitedListToSet(origin.getScope()));
|
||||
}
|
||||
|
||||
if (StrUtil.isNotBlank(origin.getAutoapprove())) {
|
||||
target.setAutoApproveScopes(StringUtils.commaDelimitedListToSet(origin.getAutoapprove()));
|
||||
}
|
||||
|
||||
if (origin.getAccessTokenValidity() != null) {
|
||||
target.setAccessTokenValiditySeconds(origin.getAccessTokenValidity());
|
||||
}
|
||||
|
||||
if (origin.getRefreshTokenValidity() != null) {
|
||||
target.setRefreshTokenValiditySeconds(origin.getRefreshTokenValidity());
|
||||
}
|
||||
|
||||
String json = origin.getAdditionalInformation();
|
||||
if (StrUtil.isNotBlank(json)) {
|
||||
try {
|
||||
@SuppressWarnings("unchecked")
|
||||
Map<String, Object> additionalInformation = JSONUtil.toBean(json, Map.class);
|
||||
target.setAdditionalInformation(additionalInformation);
|
||||
}
|
||||
catch (Exception e) {
|
||||
log.warn("Could not decode JSON for additional information: " + json, e);
|
||||
}
|
||||
}
|
||||
|
||||
return target;
|
||||
}
|
||||
|
||||
}
|
||||
Reference in new issue
Block a user