diff --git a/README.md b/README.md
index a7cacb3..8f6ba28 100644
--- a/README.md
+++ b/README.md
@@ -1,9 +1,9 @@
-
+
-
-
+
+
@@ -59,7 +59,8 @@ SpringBlade
* 交流一群:`477853168`(满)
* 交流二群:`751253339`(满)
* 交流三群:`784729540`(满)
-* 交流四群:`1034621754`
+* 交流四群:`1034621754`(满)
+* 交流五群:`946350912`
## 在线演示
* Saber-基于Vue:[https://saber.bladex.vip](https://saber.bladex.vip)
diff --git a/blade-auth/pom.xml b/blade-auth/pom.xml
index 2bd3c42..3fb5cb5 100644
--- a/blade-auth/pom.xml
+++ b/blade-auth/pom.xml
@@ -8,7 +8,7 @@
SpringBlade
org.springblade
- 2.7.1
+ 2.7.2
blade-auth
@@ -38,6 +38,11 @@
blade-core-log
${blade.tool.version}
+
+ org.springblade
+ blade-core-social
+ ${blade.tool.version}
+
org.springblade
blade-user-api
diff --git a/blade-auth/src/main/java/org/springblade/auth/controller/SocialController.java b/blade-auth/src/main/java/org/springblade/auth/controller/SocialController.java
new file mode 100644
index 0000000..e231dd6
--- /dev/null
+++ b/blade-auth/src/main/java/org/springblade/auth/controller/SocialController.java
@@ -0,0 +1,92 @@
+/**
+ * Copyright (c) 2018-2028, Chill Zhuang 庄骞 (smallchill@163.com).
+ *
+ * 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 org.springblade.auth.controller;
+
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.AllArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import me.zhyd.oauth.model.AuthCallback;
+import me.zhyd.oauth.model.AuthToken;
+import me.zhyd.oauth.request.AuthRequest;
+import me.zhyd.oauth.utils.AuthStateUtils;
+import org.springblade.core.social.props.SocialProperties;
+import org.springblade.core.social.utils.SocialUtil;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+
+/**
+ * 第三方登陆端点
+ *
+ * @author Chill
+ */
+@Slf4j
+@RestController
+@AllArgsConstructor
+@ConditionalOnProperty(value = "social.enabled", havingValue = "true")
+@Api(value = "第三方登陆", tags = "第三方登陆端点")
+public class SocialController {
+
+ private final SocialProperties socialProperties;
+
+ /**
+ * 授权完毕跳转
+ */
+ @ApiOperation(value = "授权完毕跳转")
+ @RequestMapping("/oauth/render/{source}")
+ public void renderAuth(@PathVariable("source") String source, HttpServletResponse response) throws IOException {
+ AuthRequest authRequest = SocialUtil.getAuthRequest(source, socialProperties);
+ String authorizeUrl = authRequest.authorize(AuthStateUtils.createState());
+ response.sendRedirect(authorizeUrl);
+ }
+
+ /**
+ * 获取认证信息
+ */
+ @ApiOperation(value = "获取认证信息")
+ @RequestMapping("/oauth/callback/{source}")
+ public Object login(@PathVariable("source") String source, AuthCallback callback) {
+ AuthRequest authRequest = SocialUtil.getAuthRequest(source, socialProperties);
+ return authRequest.login(callback);
+ }
+
+ /**
+ * 撤销授权
+ */
+ @ApiOperation(value = "撤销授权")
+ @RequestMapping("/oauth/revoke/{source}/{token}")
+ public Object revokeAuth(@PathVariable("source") String source, @PathVariable("token") String token) {
+ AuthRequest authRequest = SocialUtil.getAuthRequest(source, socialProperties);
+ return authRequest.revoke(AuthToken.builder().accessToken(token).build());
+ }
+
+ /**
+ * 续期accessToken
+ */
+ @ApiOperation(value = "续期令牌")
+ @RequestMapping("/oauth/refresh/{source}")
+ public Object refreshAuth(@PathVariable("source") String source, String token) {
+ AuthRequest authRequest = SocialUtil.getAuthRequest(source, socialProperties);
+ return authRequest.refresh(AuthToken.builder().refreshToken(token).build());
+ }
+
+
+}
diff --git a/blade-auth/src/main/java/org/springblade/auth/granter/SocialTokenGranter.java b/blade-auth/src/main/java/org/springblade/auth/granter/SocialTokenGranter.java
new file mode 100644
index 0000000..905312d
--- /dev/null
+++ b/blade-auth/src/main/java/org/springblade/auth/granter/SocialTokenGranter.java
@@ -0,0 +1,91 @@
+/**
+ * Copyright (c) 2018-2028, Chill Zhuang 庄骞 (smallchill@163.com).
+ *
+ * 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 org.springblade.auth.granter;
+
+import lombok.AllArgsConstructor;
+import me.zhyd.oauth.model.AuthCallback;
+import me.zhyd.oauth.model.AuthResponse;
+import me.zhyd.oauth.model.AuthUser;
+import me.zhyd.oauth.request.AuthRequest;
+import org.springblade.auth.utils.TokenUtil;
+import org.springblade.core.log.exception.ServiceException;
+import org.springblade.core.social.props.SocialProperties;
+import org.springblade.core.social.utils.SocialUtil;
+import org.springblade.core.tool.api.R;
+import org.springblade.core.tool.utils.BeanUtil;
+import org.springblade.core.tool.utils.Func;
+import org.springblade.core.tool.utils.WebUtil;
+import org.springblade.system.user.entity.UserInfo;
+import org.springblade.system.user.entity.UserOauth;
+import org.springblade.system.user.feign.IUserClient;
+import org.springframework.stereotype.Component;
+
+import javax.servlet.http.HttpServletRequest;
+import java.util.Objects;
+
+/**
+ * SocialTokenGranter
+ *
+ * @author Chill
+ */
+@Component
+@AllArgsConstructor
+public class SocialTokenGranter implements ITokenGranter {
+
+ public static final String GRANT_TYPE = "social";
+
+ private static final Integer AUTH_SUCCESS_CODE = 2000;
+
+ private final IUserClient userClient;
+ private final SocialProperties socialProperties;
+
+ @Override
+ public UserInfo grant(TokenParameter tokenParameter) {
+ HttpServletRequest request = WebUtil.getRequest();
+ String tenantId = Func.toStr(request.getHeader(TokenUtil.TENANT_HEADER_KEY), TokenUtil.DEFAULT_TENANT_ID);
+ // 开放平台来源
+ String sourceParameter = request.getParameter("source");
+ // 匹配是否有别名定义
+ String source = socialProperties.getAlias().getOrDefault(sourceParameter, sourceParameter);
+ // 开放平台授权码
+ String code = request.getParameter("code");
+ // 开放平台状态吗
+ String state = request.getParameter("state");
+
+ // 获取开放平台授权数据
+ AuthRequest authRequest = SocialUtil.getAuthRequest(source, socialProperties);
+ AuthCallback authCallback = new AuthCallback();
+ authCallback.setCode(code);
+ authCallback.setState(state);
+ AuthResponse authResponse = authRequest.login(authCallback);
+ AuthUser authUser;
+ if (authResponse.getCode() == AUTH_SUCCESS_CODE) {
+ authUser = (AuthUser) authResponse.getData();
+ } else {
+ throw new ServiceException("social grant failure, auth response is not success");
+ }
+
+ // 组装数据
+ UserOauth userOauth = Objects.requireNonNull(BeanUtil.copy(authUser, UserOauth.class));
+ userOauth.setSource(authUser.getSource());
+ userOauth.setTenantId(tenantId);
+ userOauth.setUuid(authUser.getUuid());
+ // 远程调用,获取认证信息
+ R result = userClient.userAuthInfo(userOauth);
+ return result.getData();
+ }
+
+}
diff --git a/blade-auth/src/main/java/org/springblade/auth/granter/TokenGranterBuilder.java b/blade-auth/src/main/java/org/springblade/auth/granter/TokenGranterBuilder.java
index 1b035a1..e8700f7 100644
--- a/blade-auth/src/main/java/org/springblade/auth/granter/TokenGranterBuilder.java
+++ b/blade-auth/src/main/java/org/springblade/auth/granter/TokenGranterBuilder.java
@@ -34,12 +34,13 @@ public class TokenGranterBuilder {
/**
* TokenGranter缓存池
*/
- private static Map granterPool = new ConcurrentHashMap<>();
+ private static final Map GRANTER_POOL = new ConcurrentHashMap<>();
static {
- granterPool.put(PasswordTokenGranter.GRANT_TYPE, SpringUtil.getBean(PasswordTokenGranter.class));
- granterPool.put(CaptchaTokenGranter.GRANT_TYPE, SpringUtil.getBean(CaptchaTokenGranter.class));
- granterPool.put(RefreshTokenGranter.GRANT_TYPE, SpringUtil.getBean(RefreshTokenGranter.class));
+ GRANTER_POOL.put(PasswordTokenGranter.GRANT_TYPE, SpringUtil.getBean(PasswordTokenGranter.class));
+ GRANTER_POOL.put(CaptchaTokenGranter.GRANT_TYPE, SpringUtil.getBean(CaptchaTokenGranter.class));
+ GRANTER_POOL.put(RefreshTokenGranter.GRANT_TYPE, SpringUtil.getBean(RefreshTokenGranter.class));
+ GRANTER_POOL.put(SocialTokenGranter.GRANT_TYPE, SpringUtil.getBean(SocialTokenGranter.class));
}
/**
@@ -49,7 +50,7 @@ public class TokenGranterBuilder {
* @return ITokenGranter
*/
public static ITokenGranter getGranter(String grantType) {
- ITokenGranter tokenGranter = granterPool.get(Func.toStr(grantType, PasswordTokenGranter.GRANT_TYPE));
+ ITokenGranter tokenGranter = GRANTER_POOL.get(Func.toStr(grantType, PasswordTokenGranter.GRANT_TYPE));
if (tokenGranter == null) {
throw new SecureException("no grantType was found");
} else {
diff --git a/blade-auth/src/main/java/org/springblade/auth/utils/TokenUtil.java b/blade-auth/src/main/java/org/springblade/auth/utils/TokenUtil.java
index c3e1d64..912a1a8 100644
--- a/blade-auth/src/main/java/org/springblade/auth/utils/TokenUtil.java
+++ b/blade-auth/src/main/java/org/springblade/auth/utils/TokenUtil.java
@@ -58,6 +58,7 @@ public class TokenUtil {
Map param = new HashMap<>(16);
param.put(TokenConstant.TOKEN_TYPE, TokenConstant.ACCESS_TOKEN);
param.put(TokenConstant.TENANT_ID, user.getTenantId());
+ param.put(TokenConstant.OAUTH_ID, userInfo.getOauthId());
param.put(TokenConstant.USER_ID, Func.toStr(user.getId()));
param.put(TokenConstant.ROLE_ID, user.getRoleId());
param.put(TokenConstant.ACCOUNT, user.getAccount());
@@ -66,6 +67,9 @@ public class TokenUtil {
TokenInfo accessToken = SecureUtil.createJWT(param, "audience", "issuser", TokenConstant.ACCESS_TOKEN);
AuthInfo authInfo = new AuthInfo();
+ authInfo.setUserId(user.getId());
+ authInfo.setTenantId(user.getTenantId());
+ authInfo.setOauthId(userInfo.getOauthId());
authInfo.setAccount(user.getAccount());
authInfo.setUserName(user.getRealName());
authInfo.setAuthority(Func.join(userInfo.getRoles()));
diff --git a/blade-auth/src/main/resources/application-dev.yml b/blade-auth/src/main/resources/application-dev.yml
index edb797b..85057ae 100644
--- a/blade-auth/src/main/resources/application-dev.yml
+++ b/blade-auth/src/main/resources/application-dev.yml
@@ -9,3 +9,8 @@ spring:
url: ${blade.datasource.dev.url}
username: ${blade.datasource.dev.username}
password: ${blade.datasource.dev.password}
+
+#第三方登陆
+social:
+ enabled: true
+ domain: http://127.0.0.1:1888
diff --git a/blade-auth/src/main/resources/application-prod.yml b/blade-auth/src/main/resources/application-prod.yml
index 6baea34..6b4d743 100644
--- a/blade-auth/src/main/resources/application-prod.yml
+++ b/blade-auth/src/main/resources/application-prod.yml
@@ -9,3 +9,8 @@ spring:
url: ${blade.datasource.prod.url}
username: ${blade.datasource.prod.username}
password: ${blade.datasource.prod.password}
+
+#第三方登陆
+social:
+ enabled: true
+ domain: http://127.0.0.1:1888
diff --git a/blade-auth/src/main/resources/application-test.yml b/blade-auth/src/main/resources/application-test.yml
index dfa7af7..0623b55 100644
--- a/blade-auth/src/main/resources/application-test.yml
+++ b/blade-auth/src/main/resources/application-test.yml
@@ -9,3 +9,8 @@ spring:
url: ${blade.datasource.test.url}
username: ${blade.datasource.test.username}
password: ${blade.datasource.test.password}
+
+#第三方登陆
+social:
+ enabled: true
+ domain: http://127.0.0.1:1888
diff --git a/blade-auth/src/main/resources/application.yml b/blade-auth/src/main/resources/application.yml
new file mode 100644
index 0000000..064e281
--- /dev/null
+++ b/blade-auth/src/main/resources/application.yml
@@ -0,0 +1,23 @@
+#第三方登陆配置
+social:
+ oauth:
+ GITHUB:
+ client-id: 233************
+ client-secret: 233************************************
+ redirect-uri: ${social.domain}/oauth/redirect/github
+ GITEE:
+ client-id: 1318429408fc3b25d1b740f909586bc3550abc803ece42b309047ef82a1ba023
+ client-secret: 253a1964b2ac092d0c2d8682530b2564f37b210f750ab51b9129aa0f7fd015b5
+ redirect-uri: ${social.domain}/oauth/redirect/gitee
+ WECHAT_OPEN:
+ client-id: 233************
+ client-secret: 233************************************
+ redirect-uri: ${social.domain}/oauth/redirect/wechat
+ QQ:
+ client-id: 233************
+ client-secret: 233************************************
+ redirect-uri: ${social.domain}/oauth/redirect/qq
+ DINGTALK:
+ client-id: 233************
+ client-secret: 233************************************
+ redirect-uri: ${social.domain}/oauth/redirect/dingtalk
diff --git a/blade-common/pom.xml b/blade-common/pom.xml
index 6c2eb10..34837d1 100644
--- a/blade-common/pom.xml
+++ b/blade-common/pom.xml
@@ -5,7 +5,7 @@
SpringBlade
org.springblade
- 2.7.1
+ 2.7.2
4.0.0
diff --git a/blade-gateway/pom.xml b/blade-gateway/pom.xml
index e2f45a8..ff88f7d 100644
--- a/blade-gateway/pom.xml
+++ b/blade-gateway/pom.xml
@@ -5,7 +5,7 @@
SpringBlade
org.springblade
- 2.7.1
+ 2.7.2
4.0.0
diff --git a/blade-gateway/src/main/java/org/springblade/gateway/provider/AuthProvider.java b/blade-gateway/src/main/java/org/springblade/gateway/provider/AuthProvider.java
index 4728ce6..dcd9104 100644
--- a/blade-gateway/src/main/java/org/springblade/gateway/provider/AuthProvider.java
+++ b/blade-gateway/src/main/java/org/springblade/gateway/provider/AuthProvider.java
@@ -40,6 +40,7 @@ public class AuthProvider {
defaultSkipUrl.add("/v2/api-docs/**");
defaultSkipUrl.add("/v2/api-docs-ext/**");
defaultSkipUrl.add("/auth/**");
+ defaultSkipUrl.add("/oauth/**");
defaultSkipUrl.add("/log/**");
defaultSkipUrl.add("/menu/routes");
defaultSkipUrl.add("/menu/auth-routes");
diff --git a/blade-ops/blade-admin/pom.xml b/blade-ops/blade-admin/pom.xml
index 047410e..66b43aa 100644
--- a/blade-ops/blade-admin/pom.xml
+++ b/blade-ops/blade-admin/pom.xml
@@ -5,7 +5,7 @@
blade-ops
org.springblade
- 2.7.1
+ 2.7.2
4.0.0
diff --git a/blade-ops/blade-develop/pom.xml b/blade-ops/blade-develop/pom.xml
index eb93f7c..a204487 100644
--- a/blade-ops/blade-develop/pom.xml
+++ b/blade-ops/blade-develop/pom.xml
@@ -6,7 +6,7 @@
org.springblade
blade-ops
- 2.7.1
+ 2.7.2
4.0.0
diff --git a/blade-ops/blade-resource/pom.xml b/blade-ops/blade-resource/pom.xml
index ca0c725..ffaa170 100644
--- a/blade-ops/blade-resource/pom.xml
+++ b/blade-ops/blade-resource/pom.xml
@@ -5,7 +5,7 @@
blade-ops
org.springblade
- 2.7.1
+ 2.7.2
4.0.0
diff --git a/blade-ops/blade-seata-order/pom.xml b/blade-ops/blade-seata-order/pom.xml
index 7b541c1..6117071 100644
--- a/blade-ops/blade-seata-order/pom.xml
+++ b/blade-ops/blade-seata-order/pom.xml
@@ -5,7 +5,7 @@
blade-ops
org.springblade
- 2.7.1
+ 2.7.2
4.0.0
diff --git a/blade-ops/blade-seata-storage/pom.xml b/blade-ops/blade-seata-storage/pom.xml
index b2a1cf0..6f9c309 100644
--- a/blade-ops/blade-seata-storage/pom.xml
+++ b/blade-ops/blade-seata-storage/pom.xml
@@ -5,7 +5,7 @@
blade-ops
org.springblade
- 2.7.1
+ 2.7.2
4.0.0
diff --git a/blade-ops/pom.xml b/blade-ops/pom.xml
index 4929ddf..b10a71a 100644
--- a/blade-ops/pom.xml
+++ b/blade-ops/pom.xml
@@ -5,7 +5,7 @@
SpringBlade
org.springblade
- 2.7.1
+ 2.7.2
4.0.0
diff --git a/blade-service-api/blade-demo-api/pom.xml b/blade-service-api/blade-demo-api/pom.xml
index 4596007..6b8b413 100644
--- a/blade-service-api/blade-demo-api/pom.xml
+++ b/blade-service-api/blade-demo-api/pom.xml
@@ -5,7 +5,7 @@
blade-service-api
org.springblade
- 2.7.1
+ 2.7.2
4.0.0
diff --git a/blade-service-api/blade-desk-api/pom.xml b/blade-service-api/blade-desk-api/pom.xml
index fde0b32..616fda5 100644
--- a/blade-service-api/blade-desk-api/pom.xml
+++ b/blade-service-api/blade-desk-api/pom.xml
@@ -5,7 +5,7 @@
blade-service-api
org.springblade
- 2.7.1
+ 2.7.2
4.0.0
diff --git a/blade-service-api/blade-dict-api/pom.xml b/blade-service-api/blade-dict-api/pom.xml
index f9a4d69..70519c6 100644
--- a/blade-service-api/blade-dict-api/pom.xml
+++ b/blade-service-api/blade-dict-api/pom.xml
@@ -5,7 +5,7 @@
blade-service-api
org.springblade
- 2.7.1
+ 2.7.2
4.0.0
diff --git a/blade-service-api/blade-system-api/pom.xml b/blade-service-api/blade-system-api/pom.xml
index 06298d5..f10cb38 100644
--- a/blade-service-api/blade-system-api/pom.xml
+++ b/blade-service-api/blade-system-api/pom.xml
@@ -5,7 +5,7 @@
blade-service-api
org.springblade
- 2.7.1
+ 2.7.2
4.0.0
diff --git a/blade-service-api/blade-system-api/src/main/java/org/springblade/system/feign/ISysClient.java b/blade-service-api/blade-system-api/src/main/java/org/springblade/system/feign/ISysClient.java
index 80754ba..302b5f2 100644
--- a/blade-service-api/blade-system-api/src/main/java/org/springblade/system/feign/ISysClient.java
+++ b/blade-service-api/blade-system-api/src/main/java/org/springblade/system/feign/ISysClient.java
@@ -16,8 +16,10 @@
package org.springblade.system.feign;
import org.springblade.core.launch.constant.AppConstant;
+import org.springblade.core.tool.api.R;
import org.springblade.system.entity.Dept;
import org.springblade.system.entity.Role;
+import org.springblade.system.entity.Tenant;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
@@ -141,4 +143,22 @@ public interface ISysClient {
@GetMapping(API_PREFIX + "/getRoleAlias")
String getRoleAlias(@RequestParam("id") Long id);
+ /**
+ * 获取租户
+ *
+ * @param id 主键
+ * @return Tenant
+ */
+ @GetMapping(API_PREFIX + "/tenant")
+ R getTenant(@RequestParam("id") Long id);
+
+ /**
+ * 获取租户
+ *
+ * @param tenantId 租户id
+ * @return Tenant
+ */
+ @GetMapping(API_PREFIX + "/tenant-id")
+ R getTenant(@RequestParam("tenantId") String tenantId);
+
}
diff --git a/blade-service-api/blade-system-api/src/main/java/org/springblade/system/feign/ISysClientFallback.java b/blade-service-api/blade-system-api/src/main/java/org/springblade/system/feign/ISysClientFallback.java
index 710cc87..f4578ab 100644
--- a/blade-service-api/blade-system-api/src/main/java/org/springblade/system/feign/ISysClientFallback.java
+++ b/blade-service-api/blade-system-api/src/main/java/org/springblade/system/feign/ISysClientFallback.java
@@ -15,8 +15,10 @@
*/
package org.springblade.system.feign;
+import org.springblade.core.tool.api.R;
import org.springblade.system.entity.Dept;
import org.springblade.system.entity.Role;
+import org.springblade.system.entity.Tenant;
import org.springframework.stereotype.Component;
import java.util.List;
@@ -83,4 +85,14 @@ public class ISysClientFallback implements ISysClient {
public String getRoleAlias(Long id) {
return null;
}
+
+ @Override
+ public R getTenant(Long id) {
+ return null;
+ }
+
+ @Override
+ public R getTenant(String tenantId) {
+ return null;
+ }
}
diff --git a/blade-service-api/blade-system-api/src/main/java/org/springblade/system/vo/GrantVO.java b/blade-service-api/blade-system-api/src/main/java/org/springblade/system/vo/GrantVO.java
new file mode 100644
index 0000000..79797f1
--- /dev/null
+++ b/blade-service-api/blade-system-api/src/main/java/org/springblade/system/vo/GrantVO.java
@@ -0,0 +1,39 @@
+/**
+ * Copyright (c) 2018-2028, Chill Zhuang 庄骞 (smallchill@163.com).
+ *
+ * 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 org.springblade.system.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * GrantVO
+ *
+ * @author Chill
+ */
+@Data
+public class GrantVO implements Serializable {
+ private static final long serialVersionUID = 1L;
+
+ @ApiModelProperty(value = "roleIds集合")
+ private List roleIds;
+
+ @ApiModelProperty(value = "menuIds集合")
+ private List menuIds;
+
+}
diff --git a/blade-service-api/blade-user-api/pom.xml b/blade-service-api/blade-user-api/pom.xml
index ca06e55..baade0a 100644
--- a/blade-service-api/blade-user-api/pom.xml
+++ b/blade-service-api/blade-user-api/pom.xml
@@ -5,7 +5,7 @@
blade-service-api
org.springblade
- 2.7.1
+ 2.7.2
4.0.0
diff --git a/blade-service-api/blade-user-api/src/main/java/org/springblade/system/user/entity/UserInfo.java b/blade-service-api/blade-user-api/src/main/java/org/springblade/system/user/entity/UserInfo.java
index d5e85e6..bb171c6 100644
--- a/blade-service-api/blade-user-api/src/main/java/org/springblade/system/user/entity/UserInfo.java
+++ b/blade-service-api/blade-user-api/src/main/java/org/springblade/system/user/entity/UserInfo.java
@@ -51,4 +51,10 @@ public class UserInfo implements Serializable {
@ApiModelProperty(value = "角色集合")
private List roles;
+ /**
+ * 第三方授权id
+ */
+ @ApiModelProperty(value = "第三方授权id")
+ private String oauthId;
+
}
diff --git a/blade-service-api/blade-user-api/src/main/java/org/springblade/system/user/entity/UserOauth.java b/blade-service-api/blade-user-api/src/main/java/org/springblade/system/user/entity/UserOauth.java
new file mode 100644
index 0000000..e6c45fd
--- /dev/null
+++ b/blade-service-api/blade-user-api/src/main/java/org/springblade/system/user/entity/UserOauth.java
@@ -0,0 +1,107 @@
+/**
+ * Copyright (c) 2018-2028, Chill Zhuang 庄骞 (smallchill@163.com).
+ *
+ * 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 org.springblade.system.user.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * 实体类
+ *
+ * @author Chill
+ */
+@Data
+@TableName("blade_user_oauth")
+public class UserOauth implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+
+ /**
+ * 主键
+ */
+ @JsonSerialize(using = ToStringSerializer.class)
+ @ApiModelProperty(value = "主键")
+ @TableId(value = "id", type = IdType.ASSIGN_ID)
+ private Long id;
+
+ /**
+ * 租户ID
+ */
+ private String tenantId;
+
+ /**
+ * 第三方系统用户ID
+ */
+ private String uuid;
+
+ /**
+ * 用户ID
+ */
+ @JsonSerialize(using = ToStringSerializer.class)
+ @ApiModelProperty(value = "用户主键")
+ private Long userId;
+
+ /**
+ * 用户名
+ */
+ private String username;
+ /**
+ * 用户昵称
+ */
+ private String nickname;
+ /**
+ * 用户头像
+ */
+ private String avatar;
+ /**
+ * 用户网址
+ */
+ private String blog;
+ /**
+ * 所在公司
+ */
+ private String company;
+ /**
+ * 位置
+ */
+ private String location;
+ /**
+ * 用户邮箱
+ */
+ private String email;
+ /**
+ * 用户备注(各平台中的用户个人介绍)
+ */
+ private String remark;
+ /**
+ * 性别
+ */
+ private String gender;
+ /**
+ * 用户来源
+ */
+ private String source;
+
+
+}
diff --git a/blade-service-api/blade-user-api/src/main/java/org/springblade/system/user/feign/IUserClient.java b/blade-service-api/blade-user-api/src/main/java/org/springblade/system/user/feign/IUserClient.java
index f758550..d4521ad 100644
--- a/blade-service-api/blade-user-api/src/main/java/org/springblade/system/user/feign/IUserClient.java
+++ b/blade-service-api/blade-user-api/src/main/java/org/springblade/system/user/feign/IUserClient.java
@@ -19,8 +19,11 @@ package org.springblade.system.user.feign;
import org.springblade.core.launch.constant.AppConstant;
import org.springblade.core.tool.api.R;
import org.springblade.system.user.entity.UserInfo;
+import org.springblade.system.user.entity.UserOauth;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;
/**
@@ -56,4 +59,13 @@ public interface IUserClient {
@GetMapping(API_PREFIX + "/user-info")
R userInfo(@RequestParam("tenantId") String tenantId, @RequestParam("account") String account, @RequestParam("password") String password);
+ /**
+ * 获取第三方平台信息
+ *
+ * @param userOauth 第三方授权用户信息
+ * @return UserInfo
+ */
+ @PostMapping(API_PREFIX + "/user-auth-info")
+ R userAuthInfo(@RequestBody UserOauth userOauth);
+
}
diff --git a/blade-service-api/blade-user-api/src/main/java/org/springblade/system/user/feign/IUserClientFallback.java b/blade-service-api/blade-user-api/src/main/java/org/springblade/system/user/feign/IUserClientFallback.java
index 02faf7b..82c9fc2 100644
--- a/blade-service-api/blade-user-api/src/main/java/org/springblade/system/user/feign/IUserClientFallback.java
+++ b/blade-service-api/blade-user-api/src/main/java/org/springblade/system/user/feign/IUserClientFallback.java
@@ -17,6 +17,7 @@ package org.springblade.system.user.feign;
import org.springblade.core.tool.api.R;
import org.springblade.system.user.entity.UserInfo;
+import org.springblade.system.user.entity.UserOauth;
import org.springframework.stereotype.Component;
/**
@@ -36,4 +37,9 @@ public class IUserClientFallback implements IUserClient {
public R userInfo(String tenantId, String account, String password) {
return R.fail("未获取到账号信息");
}
+
+ @Override
+ public R userAuthInfo(UserOauth userOauth) {
+ return R.fail("未获取到账号信息");
+ }
}
diff --git a/blade-service-api/pom.xml b/blade-service-api/pom.xml
index e4feba0..710ce79 100644
--- a/blade-service-api/pom.xml
+++ b/blade-service-api/pom.xml
@@ -5,13 +5,13 @@
SpringBlade
org.springblade
- 2.7.1
+ 2.7.2
4.0.0
blade-service-api
${project.artifactId}
- 2.7.1
+ 2.7.2
pom
SpringBlade 微服务API集合
diff --git a/blade-service/blade-demo/pom.xml b/blade-service/blade-demo/pom.xml
index fb0e5b3..1febf83 100644
--- a/blade-service/blade-demo/pom.xml
+++ b/blade-service/blade-demo/pom.xml
@@ -5,7 +5,7 @@
blade-service
org.springblade
- 2.7.1
+ 2.7.2
4.0.0
diff --git a/blade-service/blade-desk/pom.xml b/blade-service/blade-desk/pom.xml
index 5fcaed7..6de212d 100644
--- a/blade-service/blade-desk/pom.xml
+++ b/blade-service/blade-desk/pom.xml
@@ -6,7 +6,7 @@
org.springblade
blade-service
- 2.7.1
+ 2.7.2
4.0.0
diff --git a/blade-service/blade-log/pom.xml b/blade-service/blade-log/pom.xml
index 0d238ea..f2b7d54 100644
--- a/blade-service/blade-log/pom.xml
+++ b/blade-service/blade-log/pom.xml
@@ -5,7 +5,7 @@
blade-service
org.springblade
- 2.7.1
+ 2.7.2
4.0.0
diff --git a/blade-service/blade-system/pom.xml b/blade-service/blade-system/pom.xml
index aeeea6d..0345b3b 100644
--- a/blade-service/blade-system/pom.xml
+++ b/blade-service/blade-system/pom.xml
@@ -5,7 +5,7 @@
blade-service
org.springblade
- 2.7.1
+ 2.7.2
4.0.0
diff --git a/blade-service/blade-system/src/main/java/org/springblade/system/controller/MenuController.java b/blade-service/blade-system/src/main/java/org/springblade/system/controller/MenuController.java
index ad2d9c1..237e594 100644
--- a/blade-service/blade-system/src/main/java/org/springblade/system/controller/MenuController.java
+++ b/blade-service/blade-system/src/main/java/org/springblade/system/controller/MenuController.java
@@ -109,7 +109,7 @@ public class MenuController extends BladeController {
@ApiOperationSupport(order = 5)
@ApiOperation(value = "前端菜单数据", notes = "前端菜单数据")
public R> routes(BladeUser user) {
- List list = menuService.routes(user.getRoleId());
+ List list = menuService.routes((user == null || user.getUserId() == 0L) ? null : user.getRoleId());
return R.data(list);
}
diff --git a/blade-service/blade-system/src/main/java/org/springblade/system/controller/RoleController.java b/blade-service/blade-system/src/main/java/org/springblade/system/controller/RoleController.java
index 619a991..f9d1f71 100644
--- a/blade-service/blade-system/src/main/java/org/springblade/system/controller/RoleController.java
+++ b/blade-service/blade-system/src/main/java/org/springblade/system/controller/RoleController.java
@@ -28,6 +28,7 @@ import org.springblade.core.tool.node.INode;
import org.springblade.core.tool.utils.Func;
import org.springblade.system.entity.Role;
import org.springblade.system.service.IRoleService;
+import org.springblade.system.vo.GrantVO;
import org.springblade.system.vo.RoleVO;
import org.springblade.system.wrapper.RoleWrapper;
import org.springframework.web.bind.annotation.*;
@@ -114,17 +115,12 @@ public class RoleController extends BladeController {
/**
* 设置菜单权限
- *
- * @param roleIds
- * @param menuIds
- * @return
*/
@PostMapping("/grant")
@ApiOperationSupport(order = 6)
@ApiOperation(value = "权限设置", notes = "传入roleId集合以及menuId集合")
- public R grant(@ApiParam(value = "roleId集合", required = true) @RequestParam String roleIds,
- @ApiParam(value = "menuId集合", required = true) @RequestParam String menuIds) {
- boolean temp = roleService.grant(Func.toLongList(roleIds), Func.toLongList(menuIds));
+ public R grant(@RequestBody GrantVO grantVO) {
+ boolean temp = roleService.grant(grantVO.getRoleIds(), grantVO.getMenuIds());
return R.status(temp);
}
diff --git a/blade-service/blade-system/src/main/java/org/springblade/system/feign/SysClient.java b/blade-service/blade-system/src/main/java/org/springblade/system/feign/SysClient.java
index e4c4158..add563a 100644
--- a/blade-service/blade-system/src/main/java/org/springblade/system/feign/SysClient.java
+++ b/blade-service/blade-system/src/main/java/org/springblade/system/feign/SysClient.java
@@ -16,11 +16,14 @@
package org.springblade.system.feign;
import lombok.AllArgsConstructor;
+import org.springblade.core.tool.api.R;
import org.springblade.system.entity.Dept;
import org.springblade.system.entity.Role;
+import org.springblade.system.entity.Tenant;
import org.springblade.system.service.IDeptService;
import org.springblade.system.service.IPostService;
import org.springblade.system.service.IRoleService;
+import org.springblade.system.service.ITenantService;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import springfox.documentation.annotations.ApiIgnore;
@@ -43,6 +46,8 @@ public class SysClient implements ISysClient {
private IRoleService roleService;
+ private ITenantService tenantService;
+
@Override
@GetMapping(API_PREFIX + "/getDept")
public Dept getDept(Long id) {
@@ -102,4 +107,16 @@ public class SysClient implements ISysClient {
public String getRoleAlias(Long id) {
return roleService.getById(id).getRoleAlias();
}
+
+ @Override
+ @GetMapping(API_PREFIX + "/tenant")
+ public R getTenant(Long id) {
+ return R.data(tenantService.getById(id));
+ }
+
+ @Override
+ @GetMapping(API_PREFIX + "/tenant-id")
+ public R getTenant(String tenantId) {
+ return R.data(tenantService.getByTenantId(tenantId));
+ }
}
diff --git a/blade-service/blade-system/src/main/java/org/springblade/system/service/ITenantService.java b/blade-service/blade-system/src/main/java/org/springblade/system/service/ITenantService.java
index 653d695..1783df1 100644
--- a/blade-service/blade-system/src/main/java/org/springblade/system/service/ITenantService.java
+++ b/blade-service/blade-system/src/main/java/org/springblade/system/service/ITenantService.java
@@ -35,6 +35,14 @@ public interface ITenantService extends BaseService {
*/
IPage selectTenantPage(IPage page, Tenant tenant);
+ /**
+ * 根据租户编号获取实体
+ *
+ * @param tenantId
+ * @return
+ */
+ Tenant getByTenantId(String tenantId);
+
/**
* 新增
*
diff --git a/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/MenuServiceImpl.java b/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/MenuServiceImpl.java
index 4902d0f..64dfe97 100644
--- a/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/MenuServiceImpl.java
+++ b/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/MenuServiceImpl.java
@@ -24,6 +24,7 @@ import org.springblade.core.tool.constant.BladeConstant;
import org.springblade.core.tool.node.ForestNodeMerger;
import org.springblade.core.tool.support.Kv;
import org.springblade.core.tool.utils.Func;
+import org.springblade.core.tool.utils.StringUtil;
import org.springblade.system.dto.MenuDTO;
import org.springblade.system.entity.Menu;
import org.springblade.system.entity.RoleMenu;
@@ -55,6 +56,9 @@ public class MenuServiceImpl extends ServiceImpl implements IM
@Override
public List routes(String roleId) {
+ if (StringUtil.isBlank(roleId)) {
+ return null;
+ }
List