1
0
mirror of synced 2025-12-15 10:52:32 +08:00

33 Commits

Author SHA1 Message Date
Yangkai.Shen
b2c718268c 📝 编写更新记录 2020-08-31 09:52:54 +08:00
Yangkai.Shen
477805e824 ⬆️ 升级 hutool-core 版本:5.4.0 2020-08-29 11:55:18 +08:00
Yangkai.Shen
54cad5e128 👌 去除一些 warning 2020-08-29 11:41:59 +08:00
yadong.zhang
23b781797c ⬆️ 升级 JustAuth 版本:1.15.7-beta.3,支持自定义 http config 和 scope 2020-08-26 10:06:06 +08:00
yadong.zhang
ce34663f92 📝 更新文档 2020-06-25 13:39:41 +08:00
yadong.zhang
6971ae0387 ⬆️ 升级 JustAuth 版本:1.15.5,支持自定义 http config 2020-06-25 13:37:19 +08:00
yadong.zhang
8a49350b61 ⬆️ 升级 JustAuth 到1.15.4-alpha 2020-06-10 20:12:23 +08:00
yadong.zhang
a82d6b6387 ⬆️ 升级 JustAuth 到1.15.4-alpha 2020-06-10 20:11:21 +08:00
Yangkai.Shen
2a593a2770 添加基础工具类 2020-04-14 15:03:02 +08:00
yadong.zhang
57e040c99f 📝 完善文档,解决ISSUE#2、ISSUE#3 2020-04-13 21:55:30 +08:00
yadong.zhang
a1bbe95fea Merge pull request #4 from zhangyd-c/dev
⬆️ 升级 `JustAuth` 版本:1.15.1
2020-04-13 21:19:46 +08:00
yadong.zhang
d08c2101cf ⬆️ 升级 JustAuth 版本:1.15.1 2020-04-13 21:13:59 +08:00
Yangkai.Shen
019839782a 📝 更新 README.md 2019-12-25 18:19:46 +08:00
Yangkai.Shen
b484c0993f 📝 添加 CHANGELOG 2019-12-25 18:19:37 +08:00
Yangkai.Shen
ce8203401c ⬆️ 升级 JustAuth 版本:1.13.2,增加微信公众号登录 2019-12-25 18:19:28 +08:00
Yangkai.Shen
248ec4fc4d 添加微信公众号登录,区分公众号和开放平台 2019-12-23 14:16:17 +08:00
Yangkai.Shen
8a2f4067c2 🐛 指定 JustAuth 中 RedisTemplate 默认 Bean 名称 2019-12-05 16:55:12 +08:00
Yangkai.Shen
13fd792521 📝 添加 CHANGELOG 2019-11-12 14:30:09 +08:00
Yangkai.Shen
03649eb5c3 📝 更新 README.md 2019-11-12 14:30:01 +08:00
Yangkai.Shen
a8b8dee49f ⬆️ 升级 JustAuth 版本:1.13.1,修复 AuthCallback 异常的问题,参见 [ISSUE#52](https://github.com/justauth/JustAuth/issues/52) 2019-11-12 14:29:49 +08:00
Yangkai.Shen
2de415c7ba 📝 更新 README.md 2019-11-04 16:26:13 +08:00
Yangkai.Shen
c670d9d10a 🔖 发布 1.3.0 2019-11-04 16:20:31 +08:00
Yangkai.Shen
dea73c1c6e 📝 添加 CHANGELOG 2019-11-04 16:20:14 +08:00
Yangkai.Shen
64a389aac4 支持 推特 2019-11-04 16:19:47 +08:00
Yangkai.Shen
e07cb8970b ⬆️ 升级 JustAuth 版本:1.13.0,支持 推特 2019-11-04 16:19:10 +08:00
Yangkai.Shen
1a690f5dd1 📝 添加 CHANGELOG 2019-11-04 16:12:35 +08:00
Yangkai.Shen
2029083f26 📝 添加 CHANGELOG 2019-11-04 16:11:54 +08:00
Yangkai.Shen
c00a127011 📝 更新 README.md 2019-11-04 16:08:34 +08:00
Yangkai.Shen
6b99039b98 🔧 修改 group id 2019-10-31 17:14:14 +08:00
Yangkai.Shen
0b00363336 📝 更新 README.md 2019-10-12 17:37:23 +08:00
Yangkai.Shen
70e9fc0af9 🔖 发布 1.2.1 2019-10-12 17:30:04 +08:00
Yangkai.Shen
2e723b2c51 📝 添加 CHANGELOG 2019-10-12 17:29:57 +08:00
Yangkai.Shen
011ad64fea 🚑 紧急修复Oauth列表空指针BUG 2019-10-12 17:28:37 +08:00
9 changed files with 482 additions and 150 deletions

View File

@@ -1,5 +1,31 @@
## 版本更新记录
### 【1.3.4.beta】2020-08-29
- 升级 `JustAuth` 版本1.15.7-beta.3,支持自定义 http config 以及自定义 scopes
- 升级 `hutool-core` 版本5.4.0,修复 `JSONUtil.toJsonStr(obj)` 报错的问题,参见 [ISSUE#8](https://github.com/justauth/justauth-spring-boot-starter/issues/8)
### 【1.3.3】2020-04-13
- 升级 `JustAuth` 版本1.15.1
### 【1.3.2】2019-12-25
- 升级 `JustAuth` 版本1.13.2,新增微信公众号登录,区分之前的开放平台登录
### 【1.3.1】2019-11-12
- 升级 `JustAuth` 版本1.13.1,修复 `AuthCallback` 异常的问题,参见 [ISSUE#52](https://github.com/justauth/JustAuth/issues/52)
### 【1.3.0】2019-11-04
- 修改 `groupId``com.xkcoding.justauth`
- 升级 `JustAuth` 版本1.13.0,支持 `推特`
### 【1.2.1】2019-10-12
- 紧急修复Oauth列表空指针BUG
### 【1.2.0】2019-10-09
- 升级 `JustAuth` 版本1.12.0,支持 `饿了么``美团`

229
README.md
View File

@@ -4,7 +4,7 @@
>
> JustAuth 脚手架
![Maven Central](https://img.shields.io/maven-central/v/com.xkcoding/justauth-spring-boot-starter.svg?color=brightgreen&label=Maven%20Central)![Travis (.com)](https://img.shields.io/travis/com/xkcoding/justauth-spring-boot-starter.svg?label=Build%20Status)![GitHub](https://img.shields.io/github/license/xkcoding/justauth-spring-boot-starter.svg)
![Maven Central](https://img.shields.io/maven-central/v/com.xkcoding.justauth/justauth-spring-boot-starter.svg?color=brightgreen&label=Maven%20Central)![Travis (.com)](https://img.shields.io/travis/com/xkcoding/justauth-spring-boot-starter.svg?label=Build%20Status)![GitHub](https://img.shields.io/github/license/xkcoding/justauth-spring-boot-starter.svg)
## 1. Demo
@@ -26,14 +26,23 @@ https://github.com/xkcoding/justauth-spring-boot-starter-demo
```xml
<dependency>
<groupId>com.xkcoding</groupId>
<groupId>com.xkcoding.justauth</groupId>
<artifactId>justauth-spring-boot-starter</artifactId>
<version>1.2.0</version>
<version>1.3.4.beta</version>
</dependency>
```
- 添加配置,在 `application.yml` 中添加配置配置信息
注意:
- `justauth.type`节点的配置,请根据项目实际情况选择,多余的可以删除
- 如果使用 QQ 登录,并且需要获取`unionId`,则必须传`union-id`配置,并置为`true`
- 如果使用支付宝登录,必传`alipay-public-key`
- 如果使用 Stack Overflow 登录,必传`stack-overflow-key`
- 如果使用企业微信登录,必传`agent-id`
- 如果使用 CODING 登录,必传`coding-group-name`
```yaml
justauth:
enabled: true
@@ -42,10 +51,133 @@ justauth:
client-id: 10**********6
client-secret: 1f7d08**********5b7**********29e
redirect-uri: http://oauth.xkcoding.com/demo/oauth/qq/callback
union-id: false
WEIBO:
client-id: 10**********6
client-secret: 1f7d08**********5b7**********29e
redirect-uri: http://oauth.xkcoding.com/demo/oauth/weibo/callback
GITEE:
client-id: 10**********6
client-secret: 1f7d08**********5b7**********29e
redirect-uri: http://oauth.xkcoding.com/demo/oauth/gitee/callback
DINGTALK:
client-id: 10**********6
client-secret: 1f7d08**********5b7**********29e
redirect-uri: http://oauth.xkcoding.com/demo/oauth/dingtalk/callback
BAIDU:
client-id: 10**********6
client-secret: 1f7d08**********5b7**********29e
redirect-uri: http://oauth.xkcoding.com/demo/oauth/baidu/callback
CSDN:
client-id: 10**********6
client-secret: 1f7d08**********5b7**********29e
redirect-uri: http://oauth.xkcoding.com/demo/oauth/csdn/callback
CODING:
client-id: 10**********6
client-secret: 1f7d08**********5b7**********29e
redirect-uri: http://oauth.xkcoding.com/demo/oauth/coding/callback
coding-group-name: xx
OSCHINA:
client-id: 10**********6
client-secret: 1f7d08**********5b7**********29e
redirect-uri: http://oauth.xkcoding.com/demo/oauth/oschina/callback
ALIPAY:
client-id: 10**********6
client-secret: 1f7d08**********5b7**********29e
redirect-uri: http://oauth.xkcoding.com/demo/oauth/alipay/callback
alipay-public-key: MIIB**************DAQAB
WECHAT_OPEN:
client-id: 10**********6
client-secret: 1f7d08**********5b7**********29e
redirect-uri: http://oauth.xkcoding.com/demo/oauth/wechat_open/callback
WECHAT_MP:
client-id: 10**********6
client-secret: 1f7d08**********5b7**********29e
redirect-uri: http://oauth.xkcoding.com/demo/oauth/wechat_mp/callback
WECHAT_ENTERPRISE:
client-id: 10**********6
client-secret: 1f7d08**********5b7**********29e
redirect-uri: http://oauth.xkcoding.com/demo/oauth/wechat_enterprise/callback
agent-id: 1000002
TAOBAO:
client-id: 10**********6
client-secret: 1f7d08**********5b7**********29e
redirect-uri: http://oauth.xkcoding.com/demo/oauth/taobao/callback
GOOGLE:
client-id: 10**********6
client-secret: 1f7d08**********5b7**********29e
redirect-uri: http://oauth.xkcoding.com/demo/oauth/google/callback
FACEBOOK:
client-id: 10**********6
client-secret: 1f7d08**********5b7**********29e
redirect-uri: http://oauth.xkcoding.com/demo/oauth/facebook/callback
DOUYIN:
client-id: 10**********6
client-secret: 1f7d08**********5b7**********29e
redirect-uri: http://oauth.xkcoding.com/demo/oauth/douyin/callback
LINKEDIN:
client-id: 10**********6
client-secret: 1f7d08**********5b7**********29e
redirect-uri: http://oauth.xkcoding.com/demo/oauth/linkedin/callback
MICROSOFT:
client-id: 10**********6
client-secret: 1f7d08**********5b7**********29e
redirect-uri: http://oauth.xkcoding.com/demo/oauth/microsoft/callback
MI:
client-id: 10**********6
client-secret: 1f7d08**********5b7**********29e
redirect-uri: http://oauth.xkcoding.com/demo/oauth/mi/callback
TOUTIAO:
client-id: 10**********6
client-secret: 1f7d08**********5b7**********29e
redirect-uri: http://oauth.xkcoding.com/demo/oauth/toutiao/callback
TEAMBITION:
client-id: 10**********6
client-secret: 1f7d08**********5b7**********29e
redirect-uri: http://oauth.xkcoding.com/demo/oauth/teambition/callback
RENREN:
client-id: 10**********6
client-secret: 1f7d08**********5b7**********29e
redirect-uri: http://oauth.xkcoding.com/demo/oauth/renren/callback
PINTEREST:
client-id: 10**********6
client-secret: 1f7d08**********5b7**********29e
redirect-uri: http://oauth.xkcoding.com/demo/oauth/pinterest/callback
STACK_OVERFLOW:
client-id: 10**********6
client-secret: 1f7d08**********5b7**********29e
redirect-uri: http://oauth.xkcoding.com/demo/oauth/stack_overflow/callback
stack-overflow-key: asd*********asd
HUAWEI:
client-id: 10**********6
client-secret: 1f7d08**********5b7**********29e
redirect-uri: http://oauth.xkcoding.com/demo/oauth/huawei/callback
KUJIALE:
client-id: 10**********6
client-secret: 1f7d08**********5b7**********29e
redirect-uri: http://oauth.xkcoding.com/demo/oauth/kujiale/callback
GITLAB:
client-id: 10**********6
client-secret: 1f7d08**********5b7**********29e
redirect-uri: http://oauth.xkcoding.com/demo/oauth/gitlab/callback
MEITUAN:
client-id: 10**********6
client-secret: 1f7d08**********5b7**********29e
redirect-uri: http://oauth.xkcoding.com/demo/oauth/meituan/callback
ELEME:
client-id: 10**********6
client-secret: 1f7d08**********5b7**********29e
redirect-uri: http://oauth.xkcoding.com/demo/oauth/eleme/callback
TWITTER:
client-id: 10**********6
client-secret: 1f7d08**********5b7**********29e
redirect-uri: http://oauth.xkcoding.com/demo/oauth/twitter/callback
cache:
type: default
```
- 然后就开始玩耍吧~
```java
@@ -388,27 +520,98 @@ justauth:
redirect-uri: http://oauth.xkcoding.com/demo/oauth/test/callback
```
## 4. 附录
## 4. http 代理配置
### 4.1. 基础配置
修改配置文件,增加如下配置:
#### 4.1.1. `justauth` 配置列表
```yaml
justauth:
http-config:
timeout: 30000
proxy:
GOOGLE:
type: HTTP
hostname: 127.0.0.1
port: 10080
```
注:当项目中使用了自定义的第三方登录,并且需要使用代理时,也要在 `http-config` 节点下添加相关配置,格式参考上面示例
## 5. 自定义 Scopes
修改配置文件,增加如下配置:
```yml
justauth:
enabled: true
type:
QQ:
client-id: 10**********6
client-secret: 1f7d08**********5b7**********29e
redirect-uri: http://oauth.xkcoding.com/demo/oauth/qq/callback
union-id: false
scopes:
- get_user_info
- xxxx
```
注:你可以前往 `me.zhyd.oauth.enums.scope` 包下查看各个渠道所支持的 scopes当然你可以不配置该项JustAuth 会默认添加上一些基础 scope
## 6. 附录
### 6.1. `justauth` 配置列表
| 属性名 | 类型 | 默认值 | 可选项 | 描述 |
| ------------------ | ------------------------------------------------------------ | ------ | ---------- | ---------------------- |
| `justauth.enabled` | `boolean` | true | true/false | 是否启用 JustAuth |
| `justauth.type` | `java.util.Map<me.zhyd.oauth.config.AuthSource,me.zhyd.oauth.config.AuthConfig>` | 无 | | JustAuth 配置 |
| `justauth.httpConfig` | `java.util.Map<me.zhyd.oauth.config.AuthSource,com.xkcoding.justauth.autoconfigure.JustAuthProperties.JustAuthHttpConfig>` | 无 | | http 相关配置 |
| `justauth.cache` | `com.xkcoding.justauth.autoconfigure.CacheProperties` | | | JustAuth缓存配置 |
| `justauth.extend` | `com.xkcoding.justauth.autoconfigure.ExtendProperties` | 无 | | JustAuth第三方平台配置 |
##### 4.1.1.1. `justauth.type` 配置列表
#### `justauth.type` 配置列表
| 属性名 | 描述 |
| --------------------------- | ------------------------------------------------------------ |
| `justauth.type.keys` | `justauth.type``Map` 格式的key 的取值请参考 [`AuthSource`](https://github.com/zhangyd-c/JustAuth/blob/master/src/main/java/me/zhyd/oauth/config/AuthSource.java) |
| `justauth.type.keys` | `justauth.type``Map` 格式的key 的取值请参考 [`AuthDefaultSource`](https://github.com/zhangyd-c/JustAuth/blob/master/src/main/java/me/zhyd/oauth/config/AuthDefaultSource.java) |
| `justauth.type.keys.values` | `justauth.type``Map` 格式的value 的取值请参考 [`AuthConfig`](https://github.com/zhangyd-c/JustAuth/blob/master/src/main/java/me/zhyd/oauth/config/AuthConfig.java) |
##### 4.1.1.2.`justauth.cache` 配置列表
##### `justauth.type.keys.values` 所有可选配置如下:
| 属性名 | 描述 | 备注 |
| --------------------------- | ----------------------------------------------------------- | ------------------------------- |
| `client-id` | 客户端id对应各平台的appKey | **必填** |
| `client-secret` | 客户端Secret对应各平台的appSecret | **必填** |
| `redirect-uri` | 登录成功后的回调地址 | **必填** |
| `alipay-public-key` | 支付宝公钥 | 当使用支付宝登录时, **该值必填**对应“RSA2(SHA256)密钥”中的“支付宝公钥” |
| `union-id` | 是否需要申请unionid | 当使用QQ登录时该值**选填**,如果置为`true`则qq开发者应用必须具备相应权限参考链接[查看详情](http://wiki.connect.qq.com/unionid%E4%BB%8B%E7%BB%8D) |
| `stack-overflow-key` | Stack Overflow Key | 当使用Stack Overflow登录时 **该值必填** |
| `agent-id` | 企业微信授权方的网页应用ID | 当使用企业微信登录时, **该值必填** |
| `coding-group-name` | 团队域名前缀 | 使用 Coding 登录时, **该值必填** |
#### `justauth.httpConfig` 配置列表
| 属性名 | 描述 |
| --------------------------- | ------------------------------------------------------------ |
| `justauth.httpConfig.keys` | `justauth.type``Map` 格式的key 的取值请参考 [`AuthDefaultSource`](https://github.com/zhangyd-c/JustAuth/blob/master/src/main/java/me/zhyd/oauth/config/AuthDefaultSource.java) |
| `justauth.httpConfig.keys.values` | `justauth.type``Map` 格式的value 的取值请参考 `JustAuthProperties.JustAuthHttpConfig` |
##### `justauth.httpConfig.keys.values` 所有可选配置如下:
| 属性名 | 描述 | 备注 |
| --------------------------- | ----------------------------------------------------------- | ------------------------------- |
| `timeout` | 请求超时时间 | |
| `proxy` | 代理的相关配置,针对国外平台,需要配置代理 | **必填** |
##### `justauth.httpConfig.proxy` 所有可选配置如下:
| 属性名 | 描述 | 备注 |
| --------------------------- | ----------------------------------------------------------- | ------------------------------- |
| `type` | 代理类型,可选值:`HTTP``DIRECT``SOCKS`,默认为 `HTTP` | |
| `hostname` | 代理 IP 地址 | |
| `port` | 代理端口 | |
#### `justauth.cache` 配置列表
| 属性名 | 类型 | 默认值 | 可选项 | 描述 |
| ------------------------ | ------------------------------------------------------------ | ----------------- | -------------------- | ------------------------------------------------------------ |
@@ -416,23 +619,23 @@ justauth:
| `justauth.cache.prefix` | `java.lang.String` | JUSTAUTH::STATE:: | | 缓存前缀目前只对redis缓存生效默认 `JUSTAUTH::STATE::` |
| `justauth.cache.timeout` | `java.time.Duration` | 3分钟 | | 超时时长目前只对redis缓存生效默认`3分钟` |
##### 4.1.1.3.`justauth.extend` 配置列表
#### `justauth.extend` 配置列表
| 属性名 | 类型 | 默认值 | 可选项 | 描述 |
| ---------------------------- | -------------------------------------------- | ------ | ------ | ------------ |
| `justauth.extend.enum-class` | `Class<? extends AuthSource>` | 无 | | 枚举类全路径 |
| `justauth.extend.config` | `java.util.Map<String, ExtendRequestConfig>` | 无 | | 对应配置信息 |
###### 4.1.1.3.1.`justauth.extend.config` 配置列表
##### `justauth.extend.config` 配置列表
| 属性名 | 类型 | 默认值 | 可选项 | 描述 |
| ------------------------------- | ------------------------------------------------------------ | ------ | ------ | ------------------------------------------------------------ |
| `justauth.extend.config.keys` | `java.lang.String` | 无 | | key 必须在 `justauth.extend.enum-class` 配置的枚举类中声明 |
| `justauth.extend.config.values` | `com.xkcoding.justauth.autoconfigure.ExtendProperties.ExtendRequestConfig` | 无 | | value 就是 `AuthConfig` 的子类,增加了一个 `request-class` 属性配置请求的全类名,具体参考类[`ExtendProperties.ExtendRequestConfig`](https://github.com/justauth/justauth-spring-boot-starter/blob/master/src/main/java/com/xkcoding/justauth/autoconfigure/ExtendProperties.java#L49-L54) |
### 4.2. SNAPSHOT版本
### 6.2. SNAPSHOT版本
![https://img.shields.io/badge/snapshots-1.2.0--SNAPSHOT-green](https://img.shields.io/badge/snapshots-1.2.0--SNAPSHOT-green)如果需要体验快照版本,可以在你的 `pom.xml`进行如下配置:
![https://img.shields.io/badge/snapshots-1.4.0--SNAPSHOT-green](https://img.shields.io/badge/snapshots-1.4.0--SNAPSHOT-green)如果需要体验快照版本,可以在你的 `pom.xml`进行如下配置:
```xml
<repositories>

21
pom.xml
View File

@@ -21,9 +21,9 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.xkcoding</groupId>
<groupId>com.xkcoding.justauth</groupId>
<artifactId>justauth-spring-boot-starter</artifactId>
<version>1.2.0</version>
<version>1.3.4.beta</version>
<name>justauth-spring-boot-starter</name>
<url>https://github.com/xkcoding/justauth-spring-boot-starter</url>
@@ -43,6 +43,11 @@
</roles>
<timezone>Asia/Shanghai</timezone>
</developer>
<developer>
<name>Yadong.Zhang</name>
<email>yadong.zhang0415@gmail.com</email>
<url>https://www.zhyd.me</url>
</developer>
</developers>
<licenses>
@@ -67,10 +72,16 @@
<!--SpringBoot版本-->
<spring-boot.version>2.1.8.RELEASE</spring-boot.version>
<!--JustAuth版本-->
<justauth.version>1.12.0</justauth.version>
<justauth.version>1.15.7-beta.3</justauth.version>
<hutool.version>5.4.0</hutool.version>
</properties>
<dependencies>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-core</artifactId>
<version>${hutool.version}</version>
</dependency>
<dependency>
<groupId>me.zhyd.oauth</groupId>
<artifactId>JustAuth</artifactId>
@@ -79,13 +90,13 @@
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
<scope>provided</scope>
<optional>true</optional>
</dependency>
<!-- 对象池使用redis时必须引入 -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
<scope>provided</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>

View File

@@ -21,6 +21,7 @@ import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.EnumUtil;
import cn.hutool.core.util.ReflectUtil;
import cn.hutool.core.util.StrUtil;
import com.xkcoding.http.config.HttpConfig;
import com.xkcoding.justauth.autoconfigure.ExtendProperties;
import com.xkcoding.justauth.autoconfigure.JustAuthProperties;
import lombok.RequiredArgsConstructor;
@@ -32,7 +33,11 @@ import me.zhyd.oauth.config.AuthSource;
import me.zhyd.oauth.enums.AuthResponseStatus;
import me.zhyd.oauth.exception.AuthException;
import me.zhyd.oauth.request.*;
import org.springframework.util.CollectionUtils;
import java.net.InetSocketAddress;
import java.net.Proxy;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -57,15 +62,25 @@ public class AuthRequestFactory {
*
* @return Oauth列表
*/
@SuppressWarnings("unchecked")
@SuppressWarnings({"unchecked", "rawtypes"})
public List<String> oauthList() {
// 默认列表
List<String> defaultList = properties.getType().keySet().stream().map(Enum::name).collect(Collectors.toList());
Class enumClass = properties.getExtend().getEnumClass();
List<String> names = EnumUtil.getNames(enumClass);
List<String> defaultList = new ArrayList<>(properties.getType().keySet());
// 扩展列表
List<String> extendList = properties.getExtend().getConfig().keySet().stream().filter(x -> names.contains(x.toUpperCase())).map(String::toUpperCase).collect(Collectors.toList());
List<String> extendList = new ArrayList<>();
ExtendProperties extend = properties.getExtend();
if (null != extend) {
Class enumClass = extend.getEnumClass();
List<String> names = EnumUtil.getNames(enumClass);
// 扩展列表
extendList = extend.getConfig()
.keySet()
.stream()
.filter(x -> names.contains(x.toUpperCase()))
.map(String::toUpperCase)
.collect(Collectors.toList());
}
// 合并
return (List<String>) CollUtil.addAll(defaultList, extendList);
}
@@ -103,10 +118,11 @@ public class AuthRequestFactory {
* @param source {@link AuthSource}
* @return {@link AuthRequest}
*/
@SuppressWarnings("unchecked")
@SuppressWarnings({"unchecked", "rawtypes"})
private AuthRequest getExtendRequest(Class clazz, String source) {
String upperSource = source.toUpperCase();
try {
EnumUtil.fromString(clazz, source.toUpperCase());
EnumUtil.fromString(clazz, upperSource);
} catch (IllegalArgumentException e) {
// 无自定义匹配
return null;
@@ -118,8 +134,12 @@ public class AuthRequestFactory {
Map<String, ExtendProperties.ExtendRequestConfig> upperConfig = new HashMap<>(6);
extendConfig.forEach((k, v) -> upperConfig.put(k.toUpperCase(), v));
ExtendProperties.ExtendRequestConfig extendRequestConfig = upperConfig.get(source.toUpperCase());
ExtendProperties.ExtendRequestConfig extendRequestConfig = upperConfig.get(upperSource);
if (extendRequestConfig != null) {
// 配置 http config
configureHttpConfig(upperSource, extendRequestConfig, properties.getHttpConfig());
Class<? extends AuthRequest> requestClass = extendRequestConfig.getRequestClass();
if (requestClass != null) {
@@ -148,12 +168,15 @@ public class AuthRequestFactory {
return null;
}
AuthConfig config = properties.getType().get(authDefaultSource);
AuthConfig config = properties.getType().get(authDefaultSource.name());
// 找不到对应关系,直接返回空
if (config == null) {
return null;
}
// 配置 http config
configureHttpConfig(authDefaultSource.name(), config, properties.getHttpConfig());
switch (authDefaultSource) {
case GITHUB:
return new AuthGithubRequest(config, authStateCache);
@@ -169,16 +192,18 @@ public class AuthRequestFactory {
return new AuthCsdnRequest(config, authStateCache);
case CODING:
return new AuthCodingRequest(config, authStateCache);
case TENCENT_CLOUD:
return new AuthTencentCloudRequest(config, authStateCache);
case OSCHINA:
return new AuthOschinaRequest(config, authStateCache);
case ALIPAY:
return new AuthAlipayRequest(config, authStateCache);
case QQ:
return new AuthQqRequest(config, authStateCache);
case WECHAT:
return new AuthWeChatRequest(config, authStateCache);
case WECHAT_MP:
return new AuthWeChatMpRequest(config, authStateCache);
case WECHAT_OPEN:
return new AuthWeChatOpenRequest(config, authStateCache);
case WECHAT_ENTERPRISE:
return new AuthWeChatEnterpriseRequest(config, authStateCache);
case TAOBAO:
return new AuthTaobaoRequest(config, authStateCache);
case GOOGLE:
@@ -205,8 +230,6 @@ public class AuthRequestFactory {
return new AuthStackOverflowRequest(config, authStateCache);
case HUAWEI:
return new AuthHuaweiRequest(config, authStateCache);
case WECHAT_ENTERPRISE:
return new AuthWeChatEnterpriseRequest(config, authStateCache);
case GITLAB:
return new AuthGitlabRequest(config, authStateCache);
case KUJIALE:
@@ -215,8 +238,36 @@ public class AuthRequestFactory {
return new AuthElemeRequest(config, authStateCache);
case MEITUAN:
return new AuthMeituanRequest(config, authStateCache);
case TWITTER:
return new AuthTwitterRequest(config, authStateCache);
default:
return null;
}
}
/**
* 配置 http 相关的配置
*
* @param authSource {@link AuthSource}
* @param authConfig {@link AuthConfig}
*/
private void configureHttpConfig(String authSource, AuthConfig authConfig, JustAuthProperties.JustAuthHttpConfig httpConfig) {
if (null == httpConfig) {
return;
}
Map<String, JustAuthProperties.JustAuthProxyConfig> proxyConfigMap = httpConfig.getProxy();
if (CollectionUtils.isEmpty(proxyConfigMap)) {
return;
}
JustAuthProperties.JustAuthProxyConfig proxyConfig = proxyConfigMap.get(authSource);
if (null == proxyConfig) {
return;
}
authConfig.setHttpConfig(HttpConfig.builder()
.timeout(httpConfig.getTimeout())
.proxy(new Proxy(Proxy.Type.valueOf(proxyConfig.getType()), new InetSocketAddress(proxyConfig.getHostname(), proxyConfig.getPort())))
.build());
}
}

View File

@@ -66,6 +66,6 @@ public class CacheProperties {
/**
* 自定义缓存
*/
CUSTOM;
CUSTOM
}
}

View File

@@ -46,7 +46,7 @@ public class ExtendProperties {
@Getter
@Setter
public static class ExtendRequestConfig extends AuthConfig{
public static class ExtendRequestConfig extends AuthConfig {
/**
* 请求对应全路径
*/

View File

@@ -20,10 +20,10 @@ package com.xkcoding.justauth.autoconfigure;
import lombok.Getter;
import lombok.Setter;
import me.zhyd.oauth.config.AuthConfig;
import me.zhyd.oauth.config.AuthDefaultSource;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.context.properties.NestedConfigurationProperty;
import java.net.Proxy;
import java.util.HashMap;
import java.util.Map;
@@ -47,7 +47,13 @@ public class JustAuthProperties {
/**
* JustAuth 默认配置
*/
private Map<AuthDefaultSource, AuthConfig> type = new HashMap<>();
private Map<String, AuthConfig> type = new HashMap<>();
/**
* http 相关的配置,可设置请求超时时间和代理配置
*/
private JustAuthHttpConfig httpConfig;
/**
* JustAuth 自定义配置
@@ -61,4 +67,19 @@ public class JustAuthProperties {
@NestedConfigurationProperty
private CacheProperties cache = new CacheProperties();
@Getter
@Setter
public static class JustAuthProxyConfig {
private String type = Proxy.Type.HTTP.name();
private String hostname;
private int port;
}
@Getter
@Setter
public static class JustAuthHttpConfig {
private int timeout;
private Map<String, JustAuthProxyConfig> proxy;
}
}

View File

@@ -54,7 +54,7 @@ abstract class JustAuthStateCacheConfiguration {
log.debug("JustAuth 使用 Redis 缓存存储 state 数据");
}
@Bean
@Bean(name = "justAuthRedisCacheTemplate")
public RedisTemplate<String, String> justAuthRedisCacheTemplate(RedisConnectionFactory redisConnectionFactory) {
RedisTemplate<String, String> template = new RedisTemplate<>();
template.setKeySerializer(new StringRedisSerializer());

View File

@@ -1,119 +1,139 @@
{
"properties": [
{
"name": "justauth.type",
"type": "java.util.Map<me.zhyd.oauth.config.AuthSource,me.zhyd.oauth.config.AuthConfig>",
"description": "JustAuth 配置.",
"sourceType": "com.xkcoding.justauth.autoconfigure.JustAuthProperties"
}
],
"hints": [
{
"name": "justauth.type.keys",
"providers": [
"values": [
{
"name": "handle-as",
"values": [
{
"value": "GITHUB",
"description": "GITHUB."
},
{
"value": "WEIBO",
"description": "WEIBO."
},
{
"value": "GITEE",
"description": "GITEE."
},
{
"value": "DINGTALK",
"description": "DINGTALK."
},
{
"value": "BAIDU",
"description": "BAIDU."
},
{
"value": "CSDN",
"description": "CSDN."
},
{
"value": "CODING",
"description": "CODING."
},
{
"value": "TENCENT_CLOUD",
"description": "TENCENT_CLOUD."
},
{
"value": "OSCHINA",
"description": "OSCHINA."
},
{
"value": "ALIPAY",
"description": "ALIPAY."
},
{
"value": "QQ",
"description": "QQ."
},
{
"value": "WECHAT",
"description": "WECHAT."
},
{
"value": "TAOBAO",
"description": "TAOBAO."
},
{
"value": "GOOGLE",
"description": "GOOGLE."
},
{
"value": "FACEBOOK",
"description": "FACEBOOK."
},
{
"value": "DOUYIN",
"description": "DOUYIN."
},
{
"value": "LINKEDIN",
"description": "LINKEDIN."
},
{
"value": "MICROSOFT",
"description": "MICROSOFT."
},
{
"value": "MI",
"description": "MI."
},
{
"value": "TOUTIAO",
"description": "TOUTIAO."
},
{
"value": "TEAMBITION",
"description": "TEAMBITION."
},
{
"value": "RENREN",
"description": "RENREN."
},
{
"value": "PINTEREST",
"description": "PINTEREST."
},
{
"value": "STACK_OVERFLOW",
"description": "STACK_OVERFLOW."
}
],
"parameters": {
"target": "me.zhyd.oauth.config.AuthSource"
}
"value": "GITHUB",
"description": "GITHUB."
},
{
"value": "WEIBO",
"description": "WEIBO."
},
{
"value": "GITEE",
"description": "GITEE."
},
{
"value": "DINGTALK",
"description": "DINGTALK."
},
{
"value": "BAIDU",
"description": "BAIDU."
},
{
"value": "CSDN",
"description": "CSDN."
},
{
"value": "CODING",
"description": "CODING."
},
{
"value": "OSCHINA",
"description": "OSCHINA."
},
{
"value": "ALIPAY",
"description": "ALIPAY."
},
{
"value": "QQ",
"description": "QQ."
},
{
"value": "TAOBAO",
"description": "TAOBAO."
},
{
"value": "GOOGLE",
"description": "GOOGLE."
},
{
"value": "FACEBOOK",
"description": "FACEBOOK."
},
{
"value": "DOUYIN",
"description": "DOUYIN."
},
{
"value": "LINKEDIN",
"description": "LINKEDIN."
},
{
"value": "MICROSOFT",
"description": "MICROSOFT."
},
{
"value": "MI",
"description": "MI."
},
{
"value": "TOUTIAO",
"description": "TOUTIAO."
},
{
"value": "TEAMBITION",
"description": "TEAMBITION."
},
{
"value": "RENREN",
"description": "RENREN."
},
{
"value": "PINTEREST",
"description": "PINTEREST."
},
{
"value": "STACK_OVERFLOW",
"description": "STACK_OVERFLOW."
},
{
"value": "HUAWEI",
"description": "HUAWEI."
},
{
"value": "WECHAT_OPEN",
"description": "WeChat open platform."
},
{
"value": "WECHAT_ENTERPRISE",
"description": "WeChat enterprise platform."
},
{
"value": "WECHAT_MP",
"description": "WeChat Official Platform."
},
{
"value": "KUJIALE",
"description": "KUJIALE."
},
{
"value": "GITLAB",
"description": "GITLAB."
},
{
"value": "MEITUAN",
"description": "MEITUAN."
},
{
"value": "ELEME",
"description": "ELEME."
},
{
"value": "GITLAB",
"description": "GITLAB."
},
{
"value": "TWITTER",
"description": "TWITTER."
},
{
"value": "ALIYUN",
"description": "ALIYUN."
}
]
},