mirror of
https://gitee.com/yadong.zhang/JustAuth.git
synced 2025-12-06 16:58:24 +08:00
获取三方实例 部分 进行重构,使之可以进行更简单的获取对应的实例。
如之前获取对应的实例:
switch (source.toLowerCase()) {
case "dingtalk":
authRequest = new AuthDingTalkRequest(AuthConfig.builder()
.clientId("")
.clientSecret("")
.redirectUri("http://localhost:8443/oauth/callback/dingtalk")
.build());
break;
case "baidu":
authRequest = new AuthBaiduRequest(AuthConfig.builder()
.clientId("")
.clientSecret("")
.redirectUri("http://localhost:8443/oauth/callback/baidu")
.scopes(Arrays.asList(
AuthBaiduScope.BASIC.getScope(),
AuthBaiduScope.SUPER_MSG.getScope(),
AuthBaiduScope.NETDISK.getScope()
))
.build());
break;
}
上面需要调用端自己去根据source编码进行 new 对应的子类,这是不合理的。调用者应该只需要关心source码和对应的配置。
现在重构后,调用端只需要传入对应的source 和自定义的配置 通过统一的入口就可以拿到正确的实例。不需要调用端做各种判断,所有逻辑判断在服务端这边做好了处理。
调用端代码如下:
AuthDefaultSource defaultSource = AuthDefaultSource.getAuthSource("wechat_mp");
AuthRequest request = defaultSource.getAuthRequestInstance(AuthConfig.builder()
.clientId("a")
.clientSecret("a")
.redirectUri("https://www.justauth.cn")
.build());
This commit is contained in:
parent
af8fda700b
commit
9971793f0c
@ -155,6 +155,7 @@ public class AuthConfig {
|
||||
* @since 1.16.0
|
||||
*/
|
||||
private String authServerId;
|
||||
|
||||
/**
|
||||
* 忽略校验 {@code redirectUri} 参数,默认不开启。当 {@code ignoreCheckRedirectUri} 为 {@code true} 时,
|
||||
* {@link me.zhyd.oauth.utils.AuthChecker#checkConfig(AuthConfig, AuthSource)} 将不会校验 {@code redirectUri} 的合法性。
|
||||
@ -163,6 +164,16 @@ public class AuthConfig {
|
||||
*/
|
||||
private boolean ignoreCheckRedirectUri;
|
||||
|
||||
/**
|
||||
* 代理地址
|
||||
*/
|
||||
private String proxyHost;
|
||||
|
||||
/**
|
||||
* 代理端口号
|
||||
*/
|
||||
private Integer proxyPort;
|
||||
|
||||
/**
|
||||
* 适配 builder 模式 set 值的情况
|
||||
*
|
||||
|
||||
@ -1,7 +1,11 @@
|
||||
package me.zhyd.oauth.config;
|
||||
|
||||
import me.zhyd.oauth.cache.AuthStateCache;
|
||||
import me.zhyd.oauth.enums.AuthResponseStatus;
|
||||
import me.zhyd.oauth.exception.AuthException;
|
||||
import me.zhyd.oauth.request.*;
|
||||
|
||||
import java.util.Arrays;
|
||||
|
||||
/**
|
||||
* JustAuth内置的各api需要的url, 用枚举类分平台类型管理
|
||||
@ -28,6 +32,16 @@ public enum AuthDefaultSource implements AuthSource {
|
||||
public String userInfo() {
|
||||
return "https://api.github.com/user";
|
||||
}
|
||||
|
||||
@Override
|
||||
public AuthRequest getAuthRequestInstance(AuthConfig authConfig) {
|
||||
return getAuthRequestInstance(authConfig,null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public AuthRequest getAuthRequestInstance(AuthConfig authConfig, AuthStateCache authStateCache) {
|
||||
return getInstance(AuthGithubRequest.class,authConfig,authStateCache);
|
||||
}
|
||||
},
|
||||
/**
|
||||
* 新浪微博
|
||||
@ -48,6 +62,16 @@ public enum AuthDefaultSource implements AuthSource {
|
||||
return "https://api.weibo.com/2/users/show.json";
|
||||
}
|
||||
|
||||
@Override
|
||||
public AuthRequest getAuthRequestInstance(AuthConfig authConfig) {
|
||||
return getAuthRequestInstance(authConfig,null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public AuthRequest getAuthRequestInstance(AuthConfig authConfig, AuthStateCache authStateCache) {
|
||||
return getInstance(AuthWeiboRequest.class,authConfig,authStateCache);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String revoke() {
|
||||
return "https://api.weibo.com/oauth2/revokeoauth2";
|
||||
@ -71,6 +95,16 @@ public enum AuthDefaultSource implements AuthSource {
|
||||
public String userInfo() {
|
||||
return "https://gitee.com/api/v5/user";
|
||||
}
|
||||
|
||||
@Override
|
||||
public AuthRequest getAuthRequestInstance(AuthConfig authConfig) {
|
||||
return getAuthRequestInstance(authConfig,null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public AuthRequest getAuthRequestInstance(AuthConfig authConfig, AuthStateCache authStateCache) {
|
||||
return getInstance(AuthGiteeRequest.class,authConfig,authStateCache);
|
||||
}
|
||||
},
|
||||
/**
|
||||
* 钉钉扫码登录
|
||||
@ -90,6 +124,16 @@ public enum AuthDefaultSource implements AuthSource {
|
||||
public String userInfo() {
|
||||
return "https://oapi.dingtalk.com/sns/getuserinfo_bycode";
|
||||
}
|
||||
|
||||
@Override
|
||||
public AuthRequest getAuthRequestInstance(AuthConfig authConfig) {
|
||||
return getAuthRequestInstance(authConfig,null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public AuthRequest getAuthRequestInstance(AuthConfig authConfig, AuthStateCache authStateCache) {
|
||||
return getInstance(AuthDingTalkRequest.class,authConfig,authStateCache);
|
||||
}
|
||||
},
|
||||
/**
|
||||
* 钉钉账号登录
|
||||
@ -109,6 +153,16 @@ public enum AuthDefaultSource implements AuthSource {
|
||||
public String userInfo() {
|
||||
return DINGTALK.userInfo();
|
||||
}
|
||||
|
||||
@Override
|
||||
public AuthRequest getAuthRequestInstance(AuthConfig authConfig) {
|
||||
return getAuthRequestInstance(authConfig,null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public AuthRequest getAuthRequestInstance(AuthConfig authConfig, AuthStateCache authStateCache) {
|
||||
return getInstance(AuthDingTalkAccountRequest.class,authConfig,authStateCache);
|
||||
}
|
||||
},
|
||||
/**
|
||||
* 百度
|
||||
@ -138,6 +192,16 @@ public enum AuthDefaultSource implements AuthSource {
|
||||
public String refresh() {
|
||||
return "https://openapi.baidu.com/oauth/2.0/token";
|
||||
}
|
||||
|
||||
@Override
|
||||
public AuthRequest getAuthRequestInstance(AuthConfig authConfig) {
|
||||
return getAuthRequestInstance(authConfig,null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public AuthRequest getAuthRequestInstance(AuthConfig authConfig, AuthStateCache authStateCache) {
|
||||
return getInstance(AuthBaiduRequest.class,authConfig,authStateCache);
|
||||
}
|
||||
},
|
||||
/**
|
||||
* csdn
|
||||
@ -157,6 +221,16 @@ public enum AuthDefaultSource implements AuthSource {
|
||||
public String userInfo() {
|
||||
return "https://api.csdn.net/user/getinfo";
|
||||
}
|
||||
|
||||
@Override
|
||||
public AuthRequest getAuthRequestInstance(AuthConfig authConfig) {
|
||||
return getAuthRequestInstance(authConfig,null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public AuthRequest getAuthRequestInstance(AuthConfig authConfig, AuthStateCache authStateCache) {
|
||||
return getInstance(AuthCsdnRequest.class,authConfig,authStateCache);
|
||||
}
|
||||
},
|
||||
/**
|
||||
* Coding,
|
||||
@ -179,6 +253,16 @@ public enum AuthDefaultSource implements AuthSource {
|
||||
public String userInfo() {
|
||||
return "https://%s.coding.net/api/account/current_user";
|
||||
}
|
||||
|
||||
@Override
|
||||
public AuthRequest getAuthRequestInstance(AuthConfig authConfig) {
|
||||
return getAuthRequestInstance(authConfig,null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public AuthRequest getAuthRequestInstance(AuthConfig authConfig, AuthStateCache authStateCache) {
|
||||
return getInstance(AuthCodingRequest.class,authConfig,authStateCache);
|
||||
}
|
||||
},
|
||||
/**
|
||||
* oschina 开源中国
|
||||
@ -198,6 +282,16 @@ public enum AuthDefaultSource implements AuthSource {
|
||||
public String userInfo() {
|
||||
return "https://www.oschina.net/action/openapi/user";
|
||||
}
|
||||
|
||||
@Override
|
||||
public AuthRequest getAuthRequestInstance(AuthConfig authConfig) {
|
||||
return getAuthRequestInstance(authConfig,null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public AuthRequest getAuthRequestInstance(AuthConfig authConfig, AuthStateCache authStateCache) {
|
||||
return getInstance(AuthOschinaRequest.class,authConfig,authStateCache);
|
||||
}
|
||||
},
|
||||
/**
|
||||
* 支付宝
|
||||
@ -217,6 +311,16 @@ public enum AuthDefaultSource implements AuthSource {
|
||||
public String userInfo() {
|
||||
return "https://openapi.alipay.com/gateway.do";
|
||||
}
|
||||
|
||||
@Override
|
||||
public AuthRequest getAuthRequestInstance(AuthConfig authConfig) {
|
||||
return getAuthRequestInstance(authConfig,null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public AuthRequest getAuthRequestInstance(AuthConfig authConfig, AuthStateCache authStateCache) {
|
||||
return getInstance(AuthAlipayRequest.class,authConfig,authStateCache);
|
||||
}
|
||||
},
|
||||
/**
|
||||
* QQ
|
||||
@ -241,6 +345,16 @@ public enum AuthDefaultSource implements AuthSource {
|
||||
public String refresh() {
|
||||
return "https://graph.qq.com/oauth2.0/token";
|
||||
}
|
||||
|
||||
@Override
|
||||
public AuthRequest getAuthRequestInstance(AuthConfig authConfig) {
|
||||
return getAuthRequestInstance(authConfig,null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public AuthRequest getAuthRequestInstance(AuthConfig authConfig, AuthStateCache authStateCache) {
|
||||
return getInstance(AuthQqRequest.class,authConfig,authStateCache);
|
||||
}
|
||||
},
|
||||
/**
|
||||
* 微信开放平台
|
||||
@ -265,6 +379,16 @@ public enum AuthDefaultSource implements AuthSource {
|
||||
public String refresh() {
|
||||
return "https://api.weixin.qq.com/sns/oauth2/refresh_token";
|
||||
}
|
||||
|
||||
@Override
|
||||
public AuthRequest getAuthRequestInstance(AuthConfig authConfig) {
|
||||
return getAuthRequestInstance(authConfig,null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public AuthRequest getAuthRequestInstance(AuthConfig authConfig, AuthStateCache authStateCache) {
|
||||
return getInstance(AuthWeChatOpenRequest.class,authConfig,authStateCache);
|
||||
}
|
||||
},
|
||||
/**
|
||||
* 微信公众平台
|
||||
@ -289,6 +413,16 @@ public enum AuthDefaultSource implements AuthSource {
|
||||
public String refresh() {
|
||||
return "https://api.weixin.qq.com/sns/oauth2/refresh_token";
|
||||
}
|
||||
|
||||
@Override
|
||||
public AuthRequest getAuthRequestInstance(AuthConfig authConfig) {
|
||||
return getAuthRequestInstance(authConfig,null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public AuthRequest getAuthRequestInstance(AuthConfig authConfig, AuthStateCache authStateCache) {
|
||||
return getInstance(AuthWeChatMpRequest.class,authConfig,authStateCache);
|
||||
}
|
||||
},
|
||||
/**
|
||||
* 淘宝
|
||||
@ -308,6 +442,16 @@ public enum AuthDefaultSource implements AuthSource {
|
||||
public String userInfo() {
|
||||
throw new AuthException(AuthResponseStatus.UNSUPPORTED);
|
||||
}
|
||||
|
||||
@Override
|
||||
public AuthRequest getAuthRequestInstance(AuthConfig authConfig) {
|
||||
return getAuthRequestInstance(authConfig,null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public AuthRequest getAuthRequestInstance(AuthConfig authConfig, AuthStateCache authStateCache) {
|
||||
return getInstance(AuthTaobaoRequest.class,authConfig,authStateCache);
|
||||
}
|
||||
},
|
||||
/**
|
||||
* Google
|
||||
@ -327,6 +471,16 @@ public enum AuthDefaultSource implements AuthSource {
|
||||
public String userInfo() {
|
||||
return "https://www.googleapis.com/oauth2/v3/userinfo";
|
||||
}
|
||||
|
||||
@Override
|
||||
public AuthRequest getAuthRequestInstance(AuthConfig authConfig) {
|
||||
return getAuthRequestInstance(authConfig,null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public AuthRequest getAuthRequestInstance(AuthConfig authConfig, AuthStateCache authStateCache) {
|
||||
return getInstance(AuthGoogleRequest.class,authConfig,authStateCache);
|
||||
}
|
||||
},
|
||||
/**
|
||||
* Facebook
|
||||
@ -346,6 +500,16 @@ public enum AuthDefaultSource implements AuthSource {
|
||||
public String userInfo() {
|
||||
return "https://graph.facebook.com/v10.0/me";
|
||||
}
|
||||
|
||||
@Override
|
||||
public AuthRequest getAuthRequestInstance(AuthConfig authConfig) {
|
||||
return getAuthRequestInstance(authConfig,null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public AuthRequest getAuthRequestInstance(AuthConfig authConfig, AuthStateCache authStateCache) {
|
||||
return getInstance(AuthFacebookRequest.class,authConfig,authStateCache);
|
||||
}
|
||||
},
|
||||
/**
|
||||
* 抖音
|
||||
@ -370,6 +534,16 @@ public enum AuthDefaultSource implements AuthSource {
|
||||
public String refresh() {
|
||||
return "https://open.douyin.com/oauth/refresh_token/";
|
||||
}
|
||||
|
||||
@Override
|
||||
public AuthRequest getAuthRequestInstance(AuthConfig authConfig) {
|
||||
return getAuthRequestInstance(authConfig,null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public AuthRequest getAuthRequestInstance(AuthConfig authConfig, AuthStateCache authStateCache) {
|
||||
return getInstance(AuthDouyinRequest.class,authConfig,authStateCache);
|
||||
}
|
||||
},
|
||||
/**
|
||||
* 领英
|
||||
@ -394,6 +568,16 @@ public enum AuthDefaultSource implements AuthSource {
|
||||
public String refresh() {
|
||||
return "https://www.linkedin.com/oauth/v2/accessToken";
|
||||
}
|
||||
|
||||
@Override
|
||||
public AuthRequest getAuthRequestInstance(AuthConfig authConfig) {
|
||||
return getAuthRequestInstance(authConfig,null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public AuthRequest getAuthRequestInstance(AuthConfig authConfig, AuthStateCache authStateCache) {
|
||||
return getInstance(AuthLinkedinRequest.class,authConfig,authStateCache);
|
||||
}
|
||||
},
|
||||
/**
|
||||
* 微软
|
||||
@ -418,6 +602,16 @@ public enum AuthDefaultSource implements AuthSource {
|
||||
public String refresh() {
|
||||
return "https://login.microsoftonline.com/common/oauth2/v2.0/token";
|
||||
}
|
||||
|
||||
@Override
|
||||
public AuthRequest getAuthRequestInstance(AuthConfig authConfig) {
|
||||
return getAuthRequestInstance(authConfig,null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public AuthRequest getAuthRequestInstance(AuthConfig authConfig, AuthStateCache authStateCache) {
|
||||
return getInstance(AuthMicrosoftRequest.class,authConfig,authStateCache);
|
||||
}
|
||||
},
|
||||
/**
|
||||
* 小米
|
||||
@ -442,6 +636,16 @@ public enum AuthDefaultSource implements AuthSource {
|
||||
public String refresh() {
|
||||
return "https://account.xiaomi.com/oauth2/token";
|
||||
}
|
||||
|
||||
@Override
|
||||
public AuthRequest getAuthRequestInstance(AuthConfig authConfig) {
|
||||
return getAuthRequestInstance(authConfig,null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public AuthRequest getAuthRequestInstance(AuthConfig authConfig, AuthStateCache authStateCache) {
|
||||
return getInstance(AuthMiRequest.class,authConfig,authStateCache);
|
||||
}
|
||||
},
|
||||
/**
|
||||
* 今日头条
|
||||
@ -461,6 +665,16 @@ public enum AuthDefaultSource implements AuthSource {
|
||||
public String userInfo() {
|
||||
return "https://open.snssdk.com/data/user_profile";
|
||||
}
|
||||
|
||||
@Override
|
||||
public AuthRequest getAuthRequestInstance(AuthConfig authConfig) {
|
||||
return getAuthRequestInstance(authConfig,null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public AuthRequest getAuthRequestInstance(AuthConfig authConfig, AuthStateCache authStateCache) {
|
||||
return getInstance(AuthToutiaoRequest.class,authConfig,authStateCache);
|
||||
}
|
||||
},
|
||||
/**
|
||||
* Teambition
|
||||
@ -485,6 +699,16 @@ public enum AuthDefaultSource implements AuthSource {
|
||||
public String userInfo() {
|
||||
return "https://api.teambition.com/users/me";
|
||||
}
|
||||
|
||||
@Override
|
||||
public AuthRequest getAuthRequestInstance(AuthConfig authConfig) {
|
||||
return getAuthRequestInstance(authConfig,null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public AuthRequest getAuthRequestInstance(AuthConfig authConfig, AuthStateCache authStateCache) {
|
||||
return getInstance(AuthTeambitionRequest.class,authConfig,authStateCache);
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
@ -510,6 +734,16 @@ public enum AuthDefaultSource implements AuthSource {
|
||||
public String userInfo() {
|
||||
return "https://api.renren.com/v2/user/get";
|
||||
}
|
||||
|
||||
@Override
|
||||
public AuthRequest getAuthRequestInstance(AuthConfig authConfig) {
|
||||
return getAuthRequestInstance(authConfig,null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public AuthRequest getAuthRequestInstance(AuthConfig authConfig, AuthStateCache authStateCache) {
|
||||
return getInstance(AuthRenrenRequest.class,authConfig,authStateCache);
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
@ -530,6 +764,16 @@ public enum AuthDefaultSource implements AuthSource {
|
||||
public String userInfo() {
|
||||
return "https://api.pinterest.com/v1/me";
|
||||
}
|
||||
|
||||
@Override
|
||||
public AuthRequest getAuthRequestInstance(AuthConfig authConfig) {
|
||||
return getAuthRequestInstance(authConfig,null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public AuthRequest getAuthRequestInstance(AuthConfig authConfig, AuthStateCache authStateCache) {
|
||||
return getInstance(AuthPinterestRequest.class,authConfig,authStateCache);
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
@ -550,6 +794,16 @@ public enum AuthDefaultSource implements AuthSource {
|
||||
public String userInfo() {
|
||||
return "https://api.stackexchange.com/2.2/me";
|
||||
}
|
||||
|
||||
@Override
|
||||
public AuthRequest getAuthRequestInstance(AuthConfig authConfig) {
|
||||
return getAuthRequestInstance(authConfig,null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public AuthRequest getAuthRequestInstance(AuthConfig authConfig, AuthStateCache authStateCache) {
|
||||
return getInstance(AuthStackOverflowRequest.class,authConfig,authStateCache);
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
@ -577,6 +831,16 @@ public enum AuthDefaultSource implements AuthSource {
|
||||
public String refresh() {
|
||||
return "https://oauth-login.cloud.huawei.com/oauth2/v2/token";
|
||||
}
|
||||
|
||||
@Override
|
||||
public AuthRequest getAuthRequestInstance(AuthConfig authConfig) {
|
||||
return getAuthRequestInstance(authConfig,null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public AuthRequest getAuthRequestInstance(AuthConfig authConfig, AuthStateCache authStateCache) {
|
||||
return getInstance(AuthHuaweiRequest.class,authConfig,authStateCache);
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
@ -599,6 +863,16 @@ public enum AuthDefaultSource implements AuthSource {
|
||||
public String userInfo() {
|
||||
return "https://qyapi.weixin.qq.com/cgi-bin/user/getuserinfo";
|
||||
}
|
||||
|
||||
@Override
|
||||
public AuthRequest getAuthRequestInstance(AuthConfig authConfig) {
|
||||
return getAuthRequestInstance(authConfig,null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public AuthRequest getAuthRequestInstance(AuthConfig authConfig, AuthStateCache authStateCache) {
|
||||
return getInstance(AbstractAuthWeChatEnterpriseRequest.class,authConfig,authStateCache);
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
@ -619,6 +893,16 @@ public enum AuthDefaultSource implements AuthSource {
|
||||
public String userInfo() {
|
||||
return "https://qyapi.weixin.qq.com/cgi-bin/user/getuserinfo";
|
||||
}
|
||||
|
||||
@Override
|
||||
public AuthRequest getAuthRequestInstance(AuthConfig authConfig) {
|
||||
return getAuthRequestInstance(authConfig,null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public AuthRequest getAuthRequestInstance(AuthConfig authConfig, AuthStateCache authStateCache) {
|
||||
return getInstance(AuthWeChatEnterpriseWebRequest.class,authConfig,authStateCache);
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
@ -646,6 +930,16 @@ public enum AuthDefaultSource implements AuthSource {
|
||||
public String refresh() {
|
||||
return "https://oauth.kujiale.com/oauth2/auth/token/refresh";
|
||||
}
|
||||
|
||||
@Override
|
||||
public AuthRequest getAuthRequestInstance(AuthConfig authConfig) {
|
||||
return getAuthRequestInstance(authConfig,null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public AuthRequest getAuthRequestInstance(AuthConfig authConfig, AuthStateCache authStateCache) {
|
||||
return getInstance(AuthKujialeRequest.class,authConfig,authStateCache);
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
@ -668,6 +962,16 @@ public enum AuthDefaultSource implements AuthSource {
|
||||
public String userInfo() {
|
||||
return "https://gitlab.com/api/v4/user";
|
||||
}
|
||||
|
||||
@Override
|
||||
public AuthRequest getAuthRequestInstance(AuthConfig authConfig) {
|
||||
return getAuthRequestInstance(authConfig,null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public AuthRequest getAuthRequestInstance(AuthConfig authConfig, AuthStateCache authStateCache) {
|
||||
return getInstance(AuthGitlabRequest.class,authConfig,authStateCache);
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
@ -695,6 +999,16 @@ public enum AuthDefaultSource implements AuthSource {
|
||||
public String refresh() {
|
||||
return "https://openapi.waimai.meituan.com/oauth/refresh_token";
|
||||
}
|
||||
|
||||
@Override
|
||||
public AuthRequest getAuthRequestInstance(AuthConfig authConfig) {
|
||||
return getAuthRequestInstance(authConfig,null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public AuthRequest getAuthRequestInstance(AuthConfig authConfig, AuthStateCache authStateCache) {
|
||||
return getInstance(AuthMeituanRequest.class,authConfig,authStateCache);
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
@ -724,6 +1038,16 @@ public enum AuthDefaultSource implements AuthSource {
|
||||
public String refresh() {
|
||||
return "https://open-api.shop.ele.me/token";
|
||||
}
|
||||
|
||||
@Override
|
||||
public AuthRequest getAuthRequestInstance(AuthConfig authConfig) {
|
||||
return getAuthRequestInstance(authConfig,null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public AuthRequest getAuthRequestInstance(AuthConfig authConfig, AuthStateCache authStateCache) {
|
||||
return getInstance(AuthElemeRequest.class,authConfig,authStateCache);
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
@ -746,6 +1070,16 @@ public enum AuthDefaultSource implements AuthSource {
|
||||
public String userInfo() {
|
||||
return "https://api.twitter.com/1.1/account/verify_credentials.json";
|
||||
}
|
||||
|
||||
@Override
|
||||
public AuthRequest getAuthRequestInstance(AuthConfig authConfig) {
|
||||
return getAuthRequestInstance(authConfig,null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public AuthRequest getAuthRequestInstance(AuthConfig authConfig, AuthStateCache authStateCache) {
|
||||
return getInstance(AuthTwitterRequest.class,authConfig,authStateCache);
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
@ -775,6 +1109,16 @@ public enum AuthDefaultSource implements AuthSource {
|
||||
public String refresh() {
|
||||
return "https://open.feishu.cn/open-apis/authen/v1/refresh_access_token";
|
||||
}
|
||||
|
||||
@Override
|
||||
public AuthRequest getAuthRequestInstance(AuthConfig authConfig) {
|
||||
return getAuthRequestInstance(authConfig,null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public AuthRequest getAuthRequestInstance(AuthConfig authConfig, AuthStateCache authStateCache) {
|
||||
return getInstance(AuthFeishuRequest.class,authConfig,authStateCache);
|
||||
}
|
||||
},
|
||||
/**
|
||||
* 京东
|
||||
@ -801,6 +1145,16 @@ public enum AuthDefaultSource implements AuthSource {
|
||||
public String refresh() {
|
||||
return "https://open-oauth.jd.com/oauth2/refresh_token";
|
||||
}
|
||||
|
||||
@Override
|
||||
public AuthRequest getAuthRequestInstance(AuthConfig authConfig) {
|
||||
return getAuthRequestInstance(authConfig,null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public AuthRequest getAuthRequestInstance(AuthConfig authConfig, AuthStateCache authStateCache) {
|
||||
return getInstance(AuthJdRequest.class,authConfig,authStateCache);
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
@ -826,6 +1180,16 @@ public enum AuthDefaultSource implements AuthSource {
|
||||
public String refresh() {
|
||||
return "https://oauth.aliyun.com/v1/token";
|
||||
}
|
||||
|
||||
@Override
|
||||
public AuthRequest getAuthRequestInstance(AuthConfig authConfig) {
|
||||
return getAuthRequestInstance(authConfig,null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public AuthRequest getAuthRequestInstance(AuthConfig authConfig, AuthStateCache authStateCache) {
|
||||
return getInstance(AuthAliyunRequest.class,authConfig,authStateCache);
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
@ -851,6 +1215,16 @@ public enum AuthDefaultSource implements AuthSource {
|
||||
public String refresh() {
|
||||
return "https://oauth.aliyun.com/v1/token";
|
||||
}
|
||||
|
||||
@Override
|
||||
public AuthRequest getAuthRequestInstance(AuthConfig authConfig) {
|
||||
return getAuthRequestInstance(authConfig,null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public AuthRequest getAuthRequestInstance(AuthConfig authConfig, AuthStateCache authStateCache) {
|
||||
return getInstance(AuthXmlyRequest.class,authConfig,authStateCache);
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
@ -878,6 +1252,16 @@ public enum AuthDefaultSource implements AuthSource {
|
||||
public String refresh() {
|
||||
return "https://api.amazon.com/auth/o2/token";
|
||||
}
|
||||
|
||||
@Override
|
||||
public AuthRequest getAuthRequestInstance(AuthConfig authConfig) {
|
||||
return getAuthRequestInstance(authConfig,null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public AuthRequest getAuthRequestInstance(AuthConfig authConfig, AuthStateCache authStateCache) {
|
||||
return getInstance(AuthAmazonRequest.class,authConfig,authStateCache);
|
||||
}
|
||||
},
|
||||
/**
|
||||
* Slack
|
||||
@ -911,6 +1295,16 @@ public enum AuthDefaultSource implements AuthSource {
|
||||
public String revoke() {
|
||||
return "https://slack.com/api/auth.revoke";
|
||||
}
|
||||
|
||||
@Override
|
||||
public AuthRequest getAuthRequestInstance(AuthConfig authConfig) {
|
||||
return getAuthRequestInstance(authConfig,null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public AuthRequest getAuthRequestInstance(AuthConfig authConfig, AuthStateCache authStateCache) {
|
||||
return getInstance(AuthSlackRequest.class,authConfig,authStateCache);
|
||||
}
|
||||
},
|
||||
/**
|
||||
* line
|
||||
@ -933,6 +1327,16 @@ public enum AuthDefaultSource implements AuthSource {
|
||||
return "https://api.line.me/v2/profile";
|
||||
}
|
||||
|
||||
@Override
|
||||
public AuthRequest getAuthRequestInstance(AuthConfig authConfig) {
|
||||
return getAuthRequestInstance(authConfig,null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public AuthRequest getAuthRequestInstance(AuthConfig authConfig, AuthStateCache authStateCache) {
|
||||
return getInstance(AuthLineRequest.class,authConfig,authStateCache);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String refresh() {
|
||||
return "https://api.line.me/oauth2/v2.1/token";
|
||||
@ -942,6 +1346,7 @@ public enum AuthDefaultSource implements AuthSource {
|
||||
public String revoke() {
|
||||
return "https://api.line.me/oauth2/v2.1/revoke";
|
||||
}
|
||||
|
||||
},
|
||||
/**
|
||||
* Okta,
|
||||
@ -975,6 +1380,16 @@ public enum AuthDefaultSource implements AuthSource {
|
||||
public String revoke() {
|
||||
return "https://%s.okta.com/oauth2/%s/v1/revoke";
|
||||
}
|
||||
|
||||
@Override
|
||||
public AuthRequest getAuthRequestInstance(AuthConfig authConfig) {
|
||||
return getAuthRequestInstance(authConfig,null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public AuthRequest getAuthRequestInstance(AuthConfig authConfig, AuthStateCache authStateCache) {
|
||||
return getInstance(AuthOktaRequest.class,authConfig,authStateCache);
|
||||
}
|
||||
},
|
||||
/**
|
||||
* 程序员客栈
|
||||
@ -996,5 +1411,44 @@ public enum AuthDefaultSource implements AuthSource {
|
||||
public String userInfo() {
|
||||
return "https://www.proginn.com/openapi/user/basic_info";
|
||||
}
|
||||
},
|
||||
|
||||
@Override
|
||||
public AuthRequest getAuthRequestInstance(AuthConfig authConfig) {
|
||||
return getAuthRequestInstance(authConfig,null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public AuthRequest getAuthRequestInstance(AuthConfig authConfig, AuthStateCache authStateCache) {
|
||||
return getInstance(AuthProginnRequest.class,authConfig,authStateCache);
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* 利用反射 生成 AuthRequest 实例
|
||||
* @param cl 目标 class
|
||||
* @param authConfig 配置
|
||||
* @param authStateCache 缓存配置
|
||||
* @return AuthRequest
|
||||
*/
|
||||
AuthRequest getInstance(Class<? extends AuthDefaultRequest> cl, AuthConfig authConfig, AuthStateCache authStateCache) {
|
||||
try {
|
||||
Class<?> clazz = Class.forName(cl.getName());
|
||||
if(authStateCache==null){
|
||||
return (AuthRequest) clazz.getDeclaredConstructor(AuthConfig.class).newInstance(authConfig);
|
||||
}else{
|
||||
return (AuthRequest) clazz.getDeclaredConstructor(AuthConfig.class, AuthStateCache.class).newInstance(authConfig, authStateCache);
|
||||
}
|
||||
} catch (Exception e) {
|
||||
throw new AuthException("未获取到有效的Auth配置");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据source获取对应的AuthSource枚举实例
|
||||
* @param source 枚举名
|
||||
* @return AuthDefaultSource
|
||||
*/
|
||||
public static AuthDefaultSource getAuthSource(String source){
|
||||
return Arrays.stream(AuthDefaultSource.values()).filter(authSource -> source.equalsIgnoreCase(authSource.name())).findAny().orElseThrow(()->new AuthException("未获取到有效的AuthSource配置"));
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,8 +1,10 @@
|
||||
package me.zhyd.oauth.config;
|
||||
|
||||
import me.zhyd.oauth.cache.AuthStateCache;
|
||||
import me.zhyd.oauth.enums.AuthResponseStatus;
|
||||
import me.zhyd.oauth.exception.AuthException;
|
||||
import me.zhyd.oauth.model.AuthCallback;
|
||||
import me.zhyd.oauth.request.AuthRequest;
|
||||
|
||||
/**
|
||||
* OAuth平台的API地址的统一接口,提供以下方法:
|
||||
@ -44,6 +46,21 @@ public interface AuthSource {
|
||||
*/
|
||||
String userInfo();
|
||||
|
||||
/**
|
||||
* 根据配置获取对应的实例
|
||||
* @param authConfig 配置
|
||||
* @return AuthRequest
|
||||
*/
|
||||
AuthRequest getAuthRequestInstance(AuthConfig authConfig);
|
||||
|
||||
/**
|
||||
* 根据配置和缓存获取对应的实例
|
||||
* @param authConfig 配置
|
||||
* @param authStateCache 缓存
|
||||
* @return AuthRequest
|
||||
*/
|
||||
AuthRequest getAuthRequestInstance(AuthConfig authConfig, AuthStateCache authStateCache);
|
||||
|
||||
/**
|
||||
* 取消授权的api
|
||||
*
|
||||
|
||||
@ -1,5 +1,12 @@
|
||||
package me.zhyd.oauth.config;
|
||||
|
||||
import me.zhyd.oauth.cache.AuthStateCache;
|
||||
import me.zhyd.oauth.exception.AuthException;
|
||||
import me.zhyd.oauth.request.AuthExtendRequest;
|
||||
import me.zhyd.oauth.request.AuthRequest;
|
||||
|
||||
import java.lang.reflect.Constructor;
|
||||
|
||||
/**
|
||||
* 测试自定义实现{@link AuthSource}接口后的枚举类
|
||||
*
|
||||
@ -40,6 +47,32 @@ public enum AuthExtendSource implements AuthSource {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public AuthRequest getAuthRequestInstance(AuthConfig authConfig) {
|
||||
return getAuthRequestInstance(authConfig,null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public AuthRequest getAuthRequestInstance(AuthConfig authConfig, AuthStateCache authStateCache) {
|
||||
try {
|
||||
AuthRequest request;
|
||||
Class<?> clazz = Class.forName(AuthExtendRequest.class.getName());
|
||||
Constructor constructor;
|
||||
if(authStateCache==null){
|
||||
constructor = clazz.getDeclaredConstructor(AuthConfig.class);
|
||||
constructor.setAccessible(true);
|
||||
request = (AuthRequest) constructor.newInstance(authConfig);
|
||||
}else{
|
||||
constructor = clazz.getDeclaredConstructor(AuthConfig.class, AuthStateCache.class);
|
||||
constructor.setAccessible(true);
|
||||
request = (AuthRequest) constructor.newInstance(authConfig, authStateCache);
|
||||
}
|
||||
return request;
|
||||
} catch (Exception e) {
|
||||
throw new AuthException("未获取到有效的Auth配置");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 取消授权的api
|
||||
*
|
||||
|
||||
@ -1,6 +1,7 @@
|
||||
package me.zhyd.oauth.request;
|
||||
|
||||
import me.zhyd.oauth.config.AuthConfig;
|
||||
import me.zhyd.oauth.config.AuthDefaultSource;
|
||||
import me.zhyd.oauth.utils.AuthStateUtils;
|
||||
import org.junit.Test;
|
||||
|
||||
@ -16,4 +17,14 @@ public class AuthWeChatMpRequestTest {
|
||||
.build());
|
||||
System.out.println(request.authorize(AuthStateUtils.createState()));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void authorize1() {
|
||||
AuthRequest request = AuthDefaultSource.getAuthSource("wechat_mp").getAuthRequestInstance(AuthConfig.builder()
|
||||
.clientId("a")
|
||||
.clientSecret("a")
|
||||
.redirectUri("https://www.justauth.cn")
|
||||
.build());
|
||||
System.out.println(request.authorize(AuthStateUtils.createState()));
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user