Skip to content

Commit c3165e2

Browse files
author
smallchill
committed
🎉 4.1.0.RELEASE 登录认证升级为国密算法,数据库password字段内容无需变动
1 parent 31b94c2 commit c3165e2

File tree

88 files changed

+288
-249
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

88 files changed

+288
-249
lines changed

README.md

+81-126
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<p align="center">
2-
<img src="https://img.shields.io/badge/Release-V4.0.0-green.svg" alt="Downloads">
2+
<img src="https://img.shields.io/badge/Release-V4.1.0-green.svg" alt="Downloads">
33
<img src="https://img.shields.io/badge/JDK-17+-green.svg" alt="Build Status">
44
<img src="https://img.shields.io/badge/license-Apache%202-blue.svg" alt="Build Status">
55
<img src="https://img.shields.io/badge/Spring%20Cloud-2023-blue.svg" alt="Coverage Status">
@@ -18,15 +18,28 @@
1818
* [BladeTool](https://github.com/chillzhuang/blade-tool)已推送至Maven中央库,直接引入即可,减少了工程的臃肿,也可更注重于业务开发
1919
* 集成Sentinel从流量控制、熔断降级、系统负载等多个维度保护服务的稳定性。
2020
* 注册中心、配置中心选型Nacos,为工程瘦身的同时加强各模块之间的联动。
21-
* 使用Traefik进行反向代理,监听后台变化自动化应用新的配置文件。
2221
* 极简封装了多租户底层,用更少的代码换来拓展性更强的SaaS多租户系统。
23-
* 借鉴OAuth2,实现了多终端认证系统,可控制子系统的token权限互相隔离。
24-
* 借鉴Security,封装了Secure模块,采用JWT做Token认证,可拓展集成Redis等细颗粒度控制方案。
25-
* 稳定生产了三年,经历了从 Camden -> Hoxton -> 2021 的技术架构,也经历了从fat jar -> docker -> k8s + jenkins的部署架构。
22+
* 借鉴OAuth2,自研多终端认证系统,可控制子系统的token权限互相隔离。
23+
* 借鉴Security,自研Secure模块,采用JWT做Token认证,可拓展集成Redis等细颗粒度控制方案。
24+
* 稳定生产了六年,经历了从 Camden -> Hoxton -> 2023 的技术架构,也经历了从fat jar -> docker -> k8s + jenkins的部署架构。
2625
* 项目分包明确,规范微服务的开发模式,使包与包之间的分工清晰。
2726

2827
## 架构图
29-
<img src="https://gitee.com/smallc/SpringBlade/raw/master/pic/springblade-framework.png"/>
28+
<img src="https://xbladex.oss-cn-hangzhou.aliyuncs.com/upload/springblade-framework.png"/>
29+
30+
## 核心技术栈
31+
32+
| 技术栈 | 版本 |
33+
|----------------------|------------|
34+
| Java | 17+ |
35+
| NodeJS | 18+ |
36+
| Spring | 6.1.10 |
37+
| Spring Boot | 3.2.7 |
38+
| Spring Cloud | 2023.0.2 |
39+
| Spring Cloud Alibaba | 2023.0.1.0 |
40+
| Nacos Alibaba | 2.3.2 |
41+
| Mybatis Plus | 3.5.7 |
42+
3043

3144
## 工程结构
3245
```
@@ -53,136 +66,78 @@ SpringBlade
5366
```
5467

5568
## 官方信息
56-
* 官网地址:[https://bladex.cn](https://bladex.cn)
57-
* 问答社区:[https://sns.bladex.cn](https://sns.bladex.cn)
58-
* 会员计划:[SpringBlade会员计划](https://gitee.com/smallc/SpringBlade/wikis/SpringBlade会员计划)
59-
* 交流一群:`477853168`(满)
60-
* 交流二群:`751253339`(满)
61-
* 交流三群:`784729540`(满)
62-
* 交流四群:`1034621754`(满)
63-
* 交流五群:`946350912`(满)
64-
* 交流六群:`511624269`(满)
65-
* 交流七群:`298061704`
66-
67-
## 在线演示
68-
* Saber-基于Vue:[https://saber.bladex.cn](https://saber.bladex.cn)
69-
* Sword-基于React:[https://sword.bladex.cn](https://sword.bladex.cn)
70-
71-
## 数据大屏
72-
* 数据大屏展示系统:[https://data.bladex.cn](https://data.bladex.cn)
69+
70+
| 简介 | 内容 |
71+
|------|-------------------------------------------------------------------------------|
72+
| 官网地址 | [https://bladex.cn](https://bladex.cn) |
73+
| 问答社区 | [https://sns.bladex.cn](https://sns.bladex.cn) |
74+
| 会员计划 | [SpringBlade会员计划](https://gitee.com/smallc/SpringBlade/wikis/SpringBlade会员计划) |
75+
| 交流一群 | `477853168` (满) |
76+
| 交流二群 | `751253339` (满) |
77+
| 交流三群 | `784729540` (满) |
78+
| 交流四群 | `1034621754` (满) |
79+
| 交流五群 | `946350912` (满) |
80+
| 交流六群 | `511624269` (满) |
81+
| 交流七群 | `298061704` |
82+
83+
## 官方产品
84+
85+
| 简介 | 演示地址 |
86+
|---------------|------------------------------------------------------|
87+
| BladeX企业级开发平台 | [https://saber3.bladex.cn](https://saber3.bladex.cn) |
88+
| BladeX可视化数据大屏 | [https://data.bladex.cn](https://data.bladex.cn) |
89+
| BladeX物联网开发平台 | [https://iot.bladex.cn](https://iot.bladex.cn) |
90+
91+
## 前端项目
92+
93+
| 简介 | 地址 |
94+
|--------------------|----------------------------------------------------------------------------------------------------|
95+
| 前端框架Sword(基于React) | [https://gitee.com/smallc/Sword](https://gitee.com/smallc/Sword) |
96+
| 前端框架Saber(基于Vue2) | [https://gitee.com/smallc/Saber](https://gitee.com/smallc/Saber) |
97+
| 前端框架Saber3(基于Vue3) | [https://gitee.com/smallc/Saber3](https://gitee.com/smallc/Saber/tree/3.x/) |
98+
99+
## 后端项目
100+
| 简介 | 地址 |
101+
|---------------|----------------------------------------------------------------------------------------------------|
102+
| 核心框架项目地址 | [https://gitee.com/smallc/blade-tool](https://gitee.com/smallc/blade-tool) |
103+
| 后端Gitee地址 | [https://gitee.com/smallc/SpringBlade](https://gitee.com/smallc/SpringBlade) |
104+
| 后端Github地址 | [https://github.com/chillzhuang/SpringBlade](https://github.com/chillzhuang/SpringBlade) |
105+
| 后端SpringBoot版 | [https://gitee.com/smallc/SpringBlade/tree/boot/](https://gitee.com/smallc/SpringBlade/tree/boot/) |
106+
107+
## 安全手册
108+
| 简介 | 地址 |
109+
|-----------|----------------------------------------------------------------------------------------------------|
110+
| Blade安全手册 | [https://www.kancloud.cn/smallchill/blade-safety](https://www.kancloud.cn/smallchill/blade-safety) |
73111

74112
## 技术文档
75-
* [SpringBlade开发手册一览](https://gitee.com/smallc/SpringBlade/wikis/SpringBlade开发手册)
76-
* [SpringBlade常见问题集锦](https://sns.bladex.cn/article-14966.html)
77-
* [SpringBlade基于Kuboard部署K8S](https://kuboard.cn/learning/k8s-practice/spring-blade/)
78-
* [SpringBlade基于Rainbond部署](https://www.rainbond.com/docs/micro-service/example/blade)
79-
80-
## 项目地址
81-
* 核心框架项目地址:[https://gitee.com/smallc/blade-tool](https://gitee.com/smallc/blade-tool)
82-
* 后端Gitee地址:[https://gitee.com/smallc/SpringBlade](https://gitee.com/smallc/SpringBlade)
83-
* 后端Github地址:[https://github.com/chillzhuang/SpringBlade](https://github.com/chillzhuang/SpringBlade)
84-
* 后端SpringBoot版:[https://gitee.com/smallc/SpringBlade/tree/boot/](https://gitee.com/smallc/SpringBlade/tree/boot/)
85-
* 前端框架Sword(基于React):[https://gitee.com/smallc/Sword](https://gitee.com/smallc/Sword)
86-
* 前端框架Saber(基于Vue2):[https://gitee.com/smallc/Saber](https://gitee.com/smallc/Saber)
87-
* 前端框架Saber3(基于Vue3):[https://gitee.com/smallc/Saber3](https://gitee.com/smallc/Saber/tree/3.x/)
88-
89-
# 开源协议
113+
114+
| 简介 | 地址 |
115+
|---------------------------|--------------------------------------------------------------------------------------------------------------------------|
116+
| SpringBlade开发手册一览 | [https://gitee.com/smallc/SpringBlade/wikis/SpringBlade开发手册](https://gitee.com/smallc/SpringBlade/wikis/SpringBlade开发手册) |
117+
| SpringBlade常见问题集锦 | [https://sns.bladex.cn/article-14966.html](https://sns.bladex.cn/article-14966.html) |
118+
| SpringBlade基于Kuboard部署K8S | [https://kuboard.cn/learning/k8s-practice/spring-blade/](https://kuboard.cn/learning/k8s-practice/spring-blade/) |
119+
| SpringBlade基于Rainbond部署 | [https://www.rainbond.com/docs/micro-service/example/blade](https://www.rainbond.com/docs/micro-service/example/blade) |
120+
121+
122+
## 免费公开课
123+
<table>
124+
<tr>
125+
<td><a href="https://space.bilibili.com/525525/channel/seriesdetail?sid=2740449" target="_blank"><img style="width: 300px; height: 170px" src="https://xbladex.oss-cn-hangzhou.aliyuncs.com/upload/springblade-course.jpg"/></a></td>
126+
<td><img style="width: 300px; height: 170px" src="https://xbladex.oss-cn-hangzhou.aliyuncs.com/upload/springblade-bilibili.jpg"/></td>
127+
</tr>
128+
</table>
129+
130+
## 开源协议
90131
Apache Licence 2.0 ([英文原文](http://www.apache.org/licenses/LICENSE-2.0.html)
91132
Apache Licence是著名的非盈利开源组织Apache采用的协议。该协议和BSD类似,同样鼓励代码共享和尊重原作者的著作权,同样允许代码修改,再发布(作为开源或商业软件)。
92133
需要满足的条件如下:
93134
* 需要给代码的用户一份Apache Licence
94135
* 如果你修改了代码,需要在被修改的文件中说明。
95136
* 在延伸的代码中(修改和有源代码衍生的代码中)需要带有原来代码中的协议,商标,专利声明和其他原来作者规定需要包含的说明。
96137
* 如果再发布的产品中包含一个Notice文件,则在Notice文件中需要带有Apache Licence。你可以在Notice中增加自己的许可,但不可以表现为对Apache Licence构成更改。
97-
Apache Licence也是对商业应用友好的许可。使用者也可以在需要的时候修改代码来满足需要并作为开源或商业产品发布/销售。
138+
Apache Licence也是对商业应用友好的许可。使用者也可以在需要的时候修改代码来满足需要并作为开源或商业产品发布/销售。
98139

99140
## 用户权益
100141
* 允许免费用于学习、毕设、公司项目、私活等,但请保留源码作者信息。
101142
* 对未经过授权和不遵循 Apache 2.0 协议二次开源或者商业化我们将追究到底。
102-
* 参考请注明:参考自 SpringBlade:https://gitee.com/smallc/SpringBlade。
103-
104-
# 界面
105-
106-
## [BladeX](https://bladex.cn/#/vip) 工作流一览
107-
<table>
108-
<tr>
109-
<td><img src="https://gitee.com/smallc/SpringBlade/raw/master/pic/bladex-flow1.png"/></td>
110-
<td><img src="https://gitee.com/smallc/SpringBlade/raw/master/pic/bladex-flow2.png"/></td>
111-
</tr>
112-
<tr>
113-
<td><img src="https://gitee.com/smallc/SpringBlade/raw/master/pic/bladex-flow3.png"/></td>
114-
<td><img src="https://gitee.com/smallc/SpringBlade/raw/master/pic/bladex-flow4.png"/></td>
115-
</tr>
116-
<tr>
117-
<td><img src="https://gitee.com/smallc/SpringBlade/raw/master/pic/bladex-flow5.png"/></td>
118-
<td><img src="https://gitee.com/smallc/SpringBlade/raw/master/pic/bladex-flow6.png"/></td>
119-
</tr>
120-
</table>
121-
122-
## [Sword](https://gitee.com/smallc/Sword) 界面一览
123-
<table>
124-
<tr>
125-
<td><img src="https://gitee.com/smallc/SpringBlade/raw/master/pic/sword-main.png"/></td>
126-
<td><img src="https://gitee.com/smallc/SpringBlade/raw/master/pic/sword-menu.png"/></td>
127-
</tr>
128-
<tr>
129-
<td><img src="https://gitee.com/smallc/SpringBlade/raw/master/pic/sword-menu-edit.png"/></td>
130-
<td><img src="https://gitee.com/smallc/SpringBlade/raw/master/pic/sword-menu-icon.png"/></td>
131-
</tr>
132-
<tr>
133-
<td><img src="https://gitee.com/smallc/SpringBlade/raw/master/pic/sword-role.png"/></td>
134-
<td><img src="https://gitee.com/smallc/SpringBlade/raw/master/pic/sword-user.png"/></td>
135-
</tr>
136-
<tr>
137-
<td><img src="https://gitee.com/smallc/SpringBlade/raw/master/pic/sword-dict.png "/></td>
138-
<td><img src="https://gitee.com/smallc/SpringBlade/raw/master/pic/sword-log.png"/></td>
139-
</tr>
140-
<tr>
141-
<td><img src="https://gitee.com/smallc/SpringBlade/raw/master/pic/sword-locale-cn.png"/></td>
142-
<td><img src="https://gitee.com/smallc/SpringBlade/raw/master/pic/sword-locale-us.png"/></td>
143-
</tr>
144-
</table>
145-
146-
## [Saber](https://gitee.com/smallc/Saber) 界面一览
147-
<table>
148-
<tr>
149-
<td><img src="https://gitee.com/smallc/SpringBlade/raw/master/pic/saber-user.png"/></td>
150-
<td><img src="https://gitee.com/smallc/SpringBlade/raw/master/pic/saber-role.png"/></td>
151-
</tr>
152-
<tr>
153-
<td><img src="https://gitee.com/smallc/SpringBlade/raw/master/pic/saber-dict.png"/></td>
154-
<td><img src="https://gitee.com/smallc/SpringBlade/raw/master/pic/saber-dict-select.png"/></td>
155-
</tr>
156-
<tr>
157-
<td><img src="https://gitee.com/smallc/SpringBlade/raw/master/pic/saber-log.png"/></td>
158-
<td><img src="https://gitee.com/smallc/SpringBlade/raw/master/pic/saber-code.png"/></td>
159-
</tr>
160-
</table>
161-
162-
## 监控界面一览
163-
<table>
164-
<tr>
165-
<td><img src="https://gitee.com/smallc/SpringBlade/raw/master/pic/springblade-k8s1.png"/></td>
166-
<td><img src="https://gitee.com/smallc/SpringBlade/raw/master/pic/springblade-k8s2.png"/></td>
167-
</tr>
168-
<tr>
169-
<td><img src="https://gitee.com/smallc/SpringBlade/raw/master/pic/springblade-grafana.png"/></td>
170-
<td><img src="https://gitee.com/smallc/SpringBlade/raw/master/pic/springblade-harbor.png"/></td>
171-
</tr>
172-
<tr>
173-
<td><img src="https://gitee.com/smallc/SpringBlade/raw/master/pic/springblade-traefik.png"/></td>
174-
<td><img src="https://gitee.com/smallc/SpringBlade/raw/master/pic/springblade-traefik-health.png"/></td>
175-
</tr>
176-
<tr>
177-
<td><img src="https://gitee.com/smallc/SpringBlade/raw/master/pic/springblade-nacos.png"/></td>
178-
<td><img src="https://gitee.com/smallc/SpringBlade/raw/master/pic/springblade-sentinel.png"/></td>
179-
</tr>
180-
<tr>
181-
<td><img src="https://gitee.com/smallc/SpringBlade/raw/master/pic/springblade-admin1.png"/></td>
182-
<td><img src="https://gitee.com/smallc/SpringBlade/raw/master/pic/springblade-admin2.png"/></td>
183-
</tr>
184-
<tr>
185-
<td><img src="https://gitee.com/smallc/SpringBlade/raw/master/pic/springblade-swagger1.png"/></td>
186-
<td><img src="https://gitee.com/smallc/SpringBlade/raw/master/pic/springblade-swagger2.png"/></td>
187-
</tr>
188-
</table>
143+
* 参考请注明:参考自 SpringBlade:https://gitee.com/smallc/SpringBlade。

blade-auth/pom.xml

+1-1
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
<parent>
99
<artifactId>SpringBlade</artifactId>
1010
<groupId>org.springblade</groupId>
11-
<version>4.0.0</version>
11+
<version>4.1.0</version>
1212
</parent>
1313

1414
<artifactId>blade-auth</artifactId>

blade-auth/src/main/java/org/springblade/auth/controller/AuthController.java

+13-6
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,9 @@
1616
package org.springblade.auth.controller;
1717

1818
import com.wf.captcha.SpecCaptcha;
19-
import io.swagger.v3.oas.annotations.tags.Tag;
2019
import io.swagger.v3.oas.annotations.Operation;
2120
import io.swagger.v3.oas.annotations.Parameter;
21+
import io.swagger.v3.oas.annotations.tags.Tag;
2222
import lombok.AllArgsConstructor;
2323
import org.springblade.auth.granter.ITokenGranter;
2424
import org.springblade.auth.granter.TokenGranterBuilder;
@@ -54,11 +54,11 @@ public class AuthController {
5454

5555
@PostMapping("token")
5656
@Operation(summary = "获取认证token", description = "传入租户ID:tenantId,账号:account,密码:password")
57-
public R<AuthInfo> token(@Parameter(name = "授权类型", required = true) @RequestParam(defaultValue = "password", required = false) String grantType,
58-
@Parameter(name = "刷新令牌") @RequestParam(required = false) String refreshToken,
59-
@Parameter(name = "租户ID", required = true) @RequestParam(defaultValue = "000000", required = false) String tenantId,
60-
@Parameter(name = "账号") @RequestParam(required = false) String account,
61-
@Parameter(name = "密码") @RequestParam(required = false) String password) {
57+
public R<AuthInfo> token(@Parameter(description = "授权类型", required = true) @RequestParam(defaultValue = "password", required = false) String grantType,
58+
@Parameter(description = "刷新令牌") @RequestParam(required = false) String refreshToken,
59+
@Parameter(description = "租户ID", required = true) @RequestParam(defaultValue = "000000", required = false) String tenantId,
60+
@Parameter(description = "账号") @RequestParam(required = false) String account,
61+
@Parameter(description = "密码") @RequestParam(required = false) String password) {
6262

6363
String userType = Func.toStr(WebUtil.getRequest().getHeader(TokenUtil.USER_TYPE_HEADER_KEY), TokenUtil.DEFAULT_USER_TYPE);
6464

@@ -92,4 +92,11 @@ public R<Kv> captcha() {
9292
return R.data(Kv.init().set("key", key).set("image", specCaptcha.toBase64()));
9393
}
9494

95+
@PostMapping("/logout")
96+
@Operation(summary = "登出")
97+
public R<Kv> logout() {
98+
// 登出预留逻辑
99+
return R.data(Kv.init().set("code", "200").set("msg", "操作成功"));
100+
}
101+
95102
}

blade-auth/src/main/java/org/springblade/auth/granter/CaptchaTokenGranter.java

+9-3
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
import org.springblade.auth.utils.TokenUtil;
2121
import org.springblade.common.cache.CacheNames;
2222
import org.springblade.core.log.exception.ServiceException;
23+
import org.springblade.core.secure.props.BladeAuthProperties;
2324
import org.springblade.core.tool.api.R;
2425
import org.springblade.core.tool.utils.*;
2526
import org.springblade.system.user.entity.UserInfo;
@@ -42,6 +43,8 @@ public class CaptchaTokenGranter implements ITokenGranter {
4243
private IUserClient userClient;
4344
private RedisUtil redisUtil;
4445

46+
private BladeAuthProperties authProperties;
47+
4548
@Override
4649
public UserInfo grant(TokenParameter tokenParameter) {
4750
HttpServletRequest request = WebUtil.getRequest();
@@ -62,14 +65,17 @@ public UserInfo grant(TokenParameter tokenParameter) {
6265
if (Func.isNoneBlank(account, password)) {
6366
// 获取用户类型
6467
String userType = tokenParameter.getArgs().getStr("userType");
68+
// 解密密码
69+
String decryptPassword = TokenUtil.decryptPassword(password, authProperties.getPublicKey(), authProperties.getPrivateKey());
70+
// 定义返回结果
6571
R<UserInfo> result;
6672
// 根据不同用户类型调用对应的接口返回数据,用户可自行拓展
6773
if (userType.equals(BladeUserEnum.WEB.getName())) {
68-
result = userClient.userInfo(tenantId, account, DigestUtil.encrypt(password));
74+
result = userClient.userInfo(tenantId, account, DigestUtil.encrypt(decryptPassword));
6975
} else if (userType.equals(BladeUserEnum.APP.getName())) {
70-
result = userClient.userInfo(tenantId, account, DigestUtil.encrypt(password));
76+
result = userClient.userInfo(tenantId, account, DigestUtil.encrypt(decryptPassword));
7177
} else {
72-
result = userClient.userInfo(tenantId, account, DigestUtil.encrypt(password));
78+
result = userClient.userInfo(tenantId, account, DigestUtil.encrypt(decryptPassword));
7379
}
7480
userInfo = result.isSuccess() ? result.getData() : null;
7581
}

0 commit comments

Comments
 (0)