From 9971793f0c903416d23c8b5e501c7aca6fbea30a Mon Sep 17 00:00:00 2001 From: ngcly <531237716@qq.com> Date: Mon, 9 Aug 2021 23:48:31 +0800 Subject: [PATCH 1/6] =?UTF-8?q?=E8=8E=B7=E5=8F=96=E4=B8=89=E6=96=B9?= =?UTF-8?q?=E5=AE=9E=E4=BE=8B=20=E9=83=A8=E5=88=86=20=E8=BF=9B=E8=A1=8C?= =?UTF-8?q?=E9=87=8D=E6=9E=84=EF=BC=8C=E4=BD=BF=E4=B9=8B=E5=8F=AF=E4=BB=A5?= =?UTF-8?q?=E8=BF=9B=E8=A1=8C=E6=9B=B4=E7=AE=80=E5=8D=95=E7=9A=84=E8=8E=B7?= =?UTF-8?q?=E5=8F=96=E5=AF=B9=E5=BA=94=E7=9A=84=E5=AE=9E=E4=BE=8B=E3=80=82?= =?UTF-8?q?=20=E5=A6=82=E4=B9=8B=E5=89=8D=E8=8E=B7=E5=8F=96=E5=AF=B9?= =?UTF-8?q?=E5=BA=94=E7=9A=84=E5=AE=9E=E4=BE=8B=EF=BC=9A=20=20=20=20=20=20?= =?UTF-8?q?=20=20=20switch=20(source.toLowerCase())=20{=20=20=20=20=20=20?= =?UTF-8?q?=20=20=20=20=20=20=20case=20"dingtalk":=20=20=20=20=20=20=20=20?= =?UTF-8?q?=20=20=20=20=20=20=20=20=20authRequest=20=3D=20new=20AuthDingTa?= =?UTF-8?q?lkRequest(AuthConfig.builder()=20=20=20=20=20=20=20=20=20=20=20?= =?UTF-8?q?=20=20=20=20=20=20=20=20=20=20=20=20=20=20.clientId("")=20=20?= =?UTF-8?q?=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20?= =?UTF-8?q?=20=20.clientSecret("")=20=20=20=20=20=20=20=20=20=20=20=20=20?= =?UTF-8?q?=20=20=20=20=20=20=20=20=20=20=20=20.redirectUri("http://localh?= =?UTF-8?q?ost:8443/oauth/callback/dingtalk")=20=20=20=20=20=20=20=20=20?= =?UTF-8?q?=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20.build());=20?= =?UTF-8?q?=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20break;=20=20=20?= =?UTF-8?q?=20=20=20=20=20=20=20=20=20=20case=20"baidu":=20=20=20=20=20=20?= =?UTF-8?q?=20=20=20=20=20=20=20=20=20=20=20authRequest=20=3D=20new=20Auth?= =?UTF-8?q?BaiduRequest(AuthConfig.builder()=20=20=20=20=20=20=20=20=20=20?= =?UTF-8?q?=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20.clientId("")=20?= =?UTF-8?q?=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20?= =?UTF-8?q?=20=20=20.clientSecret("")=20=20=20=20=20=20=20=20=20=20=20=20?= =?UTF-8?q?=20=20=20=20=20=20=20=20=20=20=20=20=20.redirectUri("http://loc?= =?UTF-8?q?alhost:8443/oauth/callback/baidu")=20=20=20=20=20=20=20=20=20?= =?UTF-8?q?=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20.scopes(Arrays.?= =?UTF-8?q?asList(=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20?= =?UTF-8?q?=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20AuthBaiduScope.BAS?= =?UTF-8?q?IC.getScope(),=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20?= =?UTF-8?q?=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20AuthBaiduSco?= =?UTF-8?q?pe.SUPER=5FMSG.getScope(),=20=20=20=20=20=20=20=20=20=20=20=20?= =?UTF-8?q?=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20?= =?UTF-8?q?AuthBaiduScope.NETDISK.getScope()=20=20=20=20=20=20=20=20=20=20?= =?UTF-8?q?=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20))=20=20=20=20=20?= =?UTF-8?q?=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20.bu?= =?UTF-8?q?ild());=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20break?= =?UTF-8?q?;=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20}=20=E4=B8=8A?= =?UTF-8?q?=E9=9D=A2=E9=9C=80=E8=A6=81=E8=B0=83=E7=94=A8=E7=AB=AF=E8=87=AA?= =?UTF-8?q?=E5=B7=B1=E5=8E=BB=E6=A0=B9=E6=8D=AEsource=E7=BC=96=E7=A0=81?= =?UTF-8?q?=E8=BF=9B=E8=A1=8C=20new=20=E5=AF=B9=E5=BA=94=E7=9A=84=E5=AD=90?= =?UTF-8?q?=E7=B1=BB=EF=BC=8C=E8=BF=99=E6=98=AF=E4=B8=8D=E5=90=88=E7=90=86?= =?UTF-8?q?=E7=9A=84=E3=80=82=E8=B0=83=E7=94=A8=E8=80=85=E5=BA=94=E8=AF=A5?= =?UTF-8?q?=E5=8F=AA=E9=9C=80=E8=A6=81=E5=85=B3=E5=BF=83source=E7=A0=81?= =?UTF-8?q?=E5=92=8C=E5=AF=B9=E5=BA=94=E7=9A=84=E9=85=8D=E7=BD=AE=E3=80=82?= =?UTF-8?q?=20=E7=8E=B0=E5=9C=A8=E9=87=8D=E6=9E=84=E5=90=8E=EF=BC=8C?= =?UTF-8?q?=E8=B0=83=E7=94=A8=E7=AB=AF=E5=8F=AA=E9=9C=80=E8=A6=81=E4=BC=A0?= =?UTF-8?q?=E5=85=A5=E5=AF=B9=E5=BA=94=E7=9A=84source=20=E5=92=8C=E8=87=AA?= =?UTF-8?q?=E5=AE=9A=E4=B9=89=E7=9A=84=E9=85=8D=E7=BD=AE=20=E9=80=9A?= =?UTF-8?q?=E8=BF=87=E7=BB=9F=E4=B8=80=E7=9A=84=E5=85=A5=E5=8F=A3=E5=B0=B1?= =?UTF-8?q?=E5=8F=AF=E4=BB=A5=E6=8B=BF=E5=88=B0=E6=AD=A3=E7=A1=AE=E7=9A=84?= =?UTF-8?q?=E5=AE=9E=E4=BE=8B=E3=80=82=E4=B8=8D=E9=9C=80=E8=A6=81=E8=B0=83?= =?UTF-8?q?=E7=94=A8=E7=AB=AF=E5=81=9A=E5=90=84=E7=A7=8D=E5=88=A4=E6=96=AD?= =?UTF-8?q?=EF=BC=8C=E6=89=80=E6=9C=89=E9=80=BB=E8=BE=91=E5=88=A4=E6=96=AD?= =?UTF-8?q?=E5=9C=A8=E6=9C=8D=E5=8A=A1=E7=AB=AF=E8=BF=99=E8=BE=B9=E5=81=9A?= =?UTF-8?q?=E5=A5=BD=E4=BA=86=E5=A4=84=E7=90=86=E3=80=82=20=E8=B0=83?= =?UTF-8?q?=E7=94=A8=E7=AB=AF=E4=BB=A3=E7=A0=81=E5=A6=82=E4=B8=8B=EF=BC=9A?= =?UTF-8?q?=20=20=20=20=20=20=20=20=20AuthDefaultSource=20defaultSource=20?= =?UTF-8?q?=3D=20AuthDefaultSource.getAuthSource("wechat=5Fmp");=20=20=20?= =?UTF-8?q?=20=20=20=20=20=20AuthRequest=20request=20=3D=20defaultSource.g?= =?UTF-8?q?etAuthRequestInstance(AuthConfig.builder()=20=20=20=20=20=20=20?= =?UTF-8?q?=20=20=20=20=20=20.clientId("a")=20=20=20=20=20=20=20=20=20=20?= =?UTF-8?q?=20=20=20.clientSecret("a")=20=20=20=20=20=20=20=20=20=20=20=20?= =?UTF-8?q?=20.redirectUri("https://www.justauth.cn")=20=20=20=20=20=20=20?= =?UTF-8?q?=20=20=20=20=20=20.build());?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/me/zhyd/oauth/config/AuthConfig.java | 11 + .../zhyd/oauth/config/AuthDefaultSource.java | 456 +++++++++++++++++- .../java/me/zhyd/oauth/config/AuthSource.java | 17 + .../zhyd/oauth/config/AuthExtendSource.java | 33 ++ .../request/AuthWeChatMpRequestTest.java | 11 + 5 files changed, 527 insertions(+), 1 deletion(-) diff --git a/src/main/java/me/zhyd/oauth/config/AuthConfig.java b/src/main/java/me/zhyd/oauth/config/AuthConfig.java index 38f4ccc..e00e742 100644 --- a/src/main/java/me/zhyd/oauth/config/AuthConfig.java +++ b/src/main/java/me/zhyd/oauth/config/AuthConfig.java @@ -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 值的情况 * diff --git a/src/main/java/me/zhyd/oauth/config/AuthDefaultSource.java b/src/main/java/me/zhyd/oauth/config/AuthDefaultSource.java index ea99d3d..4c613a6 100644 --- a/src/main/java/me/zhyd/oauth/config/AuthDefaultSource.java +++ b/src/main/java/me/zhyd/oauth/config/AuthDefaultSource.java @@ -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 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配置")); + } } diff --git a/src/main/java/me/zhyd/oauth/config/AuthSource.java b/src/main/java/me/zhyd/oauth/config/AuthSource.java index a6cde64..db67a75 100644 --- a/src/main/java/me/zhyd/oauth/config/AuthSource.java +++ b/src/main/java/me/zhyd/oauth/config/AuthSource.java @@ -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 * diff --git a/src/test/java/me/zhyd/oauth/config/AuthExtendSource.java b/src/test/java/me/zhyd/oauth/config/AuthExtendSource.java index 233c1dc..4101f06 100644 --- a/src/test/java/me/zhyd/oauth/config/AuthExtendSource.java +++ b/src/test/java/me/zhyd/oauth/config/AuthExtendSource.java @@ -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 * diff --git a/src/test/java/me/zhyd/oauth/request/AuthWeChatMpRequestTest.java b/src/test/java/me/zhyd/oauth/request/AuthWeChatMpRequestTest.java index 1fd144a..14dff6f 100644 --- a/src/test/java/me/zhyd/oauth/request/AuthWeChatMpRequestTest.java +++ b/src/test/java/me/zhyd/oauth/request/AuthWeChatMpRequestTest.java @@ -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())); + } } -- Gitee From 5073f828971123031b47608f764daa96b78aa1e9 Mon Sep 17 00:00:00 2001 From: ngcly <531237716@qq.com> Date: Tue, 10 Aug 2021 00:01:12 +0800 Subject: [PATCH 2/6] 1 --- .../java/me/zhyd/oauth/request/AuthAlipayRequest.java | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/main/java/me/zhyd/oauth/request/AuthAlipayRequest.java b/src/main/java/me/zhyd/oauth/request/AuthAlipayRequest.java index d06a230..1457676 100644 --- a/src/main/java/me/zhyd/oauth/request/AuthAlipayRequest.java +++ b/src/main/java/me/zhyd/oauth/request/AuthAlipayRequest.java @@ -39,8 +39,13 @@ public class AuthAlipayRequest extends AuthDefaultRequest { public AuthAlipayRequest(AuthConfig config, AuthStateCache authStateCache) { super(config, AuthDefaultSource.ALIPAY, authStateCache); - this.alipayClient = new DefaultAlipayClient(AuthDefaultSource.ALIPAY.accessToken(), config.getClientId(), config.getClientSecret(), "json", "UTF-8", config - .getAlipayPublicKey(), "RSA2"); + if(StringUtils.isNotEmpty(config.getProxyHost()) && config.getProxyPort()!=null){ + this.alipayClient = new DefaultAlipayClient(AuthDefaultSource.ALIPAY.accessToken(), config.getClientId(), config.getClientSecret(), + "json", "UTF-8", config.getAlipayPublicKey(), "RSA2", config.getProxyHost(), config.getProxyPort()); + }else{ + this.alipayClient = new DefaultAlipayClient(AuthDefaultSource.ALIPAY.accessToken(), config.getClientId(), config.getClientSecret(), "json", "UTF-8", config + .getAlipayPublicKey(), "RSA2"); + } } public AuthAlipayRequest(AuthConfig config, AuthStateCache authStateCache, String proxyHost, Integer proxyPort) { -- Gitee From 7cdc71916668cadd2d347ca4dcb377885b24f09e Mon Sep 17 00:00:00 2001 From: ngcly <531237716@qq.com> Date: Tue, 10 Aug 2021 10:18:42 +0800 Subject: [PATCH 3/6] =?UTF-8?q?=E7=BB=A7=E7=BB=AD=E8=BF=9B=E8=A1=8C?= =?UTF-8?q?=E4=BC=98=E5=8C=96=EF=BC=8C=E5=8E=BB=E6=8E=89=E5=A4=9A=E4=BD=99?= =?UTF-8?q?=E7=9A=84=E6=94=B9=E5=8A=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../zhyd/oauth/config/AuthDefaultSource.java | 544 +++--------------- .../java/me/zhyd/oauth/config/AuthSource.java | 17 - .../zhyd/oauth/config/AuthExtendSource.java | 54 +- .../request/AuthWeChatMpRequestTest.java | 2 + 4 files changed, 96 insertions(+), 521 deletions(-) diff --git a/src/main/java/me/zhyd/oauth/config/AuthDefaultSource.java b/src/main/java/me/zhyd/oauth/config/AuthDefaultSource.java index 4c613a6..fb750ac 100644 --- a/src/main/java/me/zhyd/oauth/config/AuthDefaultSource.java +++ b/src/main/java/me/zhyd/oauth/config/AuthDefaultSource.java @@ -17,7 +17,7 @@ public enum AuthDefaultSource implements AuthSource { /** * Github */ - GITHUB { + GITHUB(AuthGithubRequest.class) { @Override public String authorize() { return "https://github.com/login/oauth/authorize"; @@ -32,21 +32,11 @@ 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); - } }, /** * 新浪微博 */ - WEIBO { + WEIBO(AuthWeiboRequest.class) { @Override public String authorize() { return "https://api.weibo.com/oauth2/authorize"; @@ -62,16 +52,6 @@ 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"; @@ -80,7 +60,7 @@ public enum AuthDefaultSource implements AuthSource { /** * gitee */ - GITEE { + GITEE(AuthGiteeRequest.class) { @Override public String authorize() { return "https://gitee.com/oauth/authorize"; @@ -95,21 +75,11 @@ 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); - } }, /** * 钉钉扫码登录 */ - DINGTALK { + DINGTALK(AuthDingTalkRequest.class) { @Override public String authorize() { return "https://oapi.dingtalk.com/connect/qrconnect"; @@ -124,21 +94,11 @@ 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); - } }, /** * 钉钉账号登录 */ - DINGTALK_ACCOUNT { + DINGTALK_ACCOUNT(AuthDingTalkAccountRequest.class) { @Override public String authorize() { return "https://oapi.dingtalk.com/connect/oauth2/sns_authorize"; @@ -153,21 +113,11 @@ 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); - } }, /** * 百度 */ - BAIDU { + BAIDU(AuthBaiduRequest.class) { @Override public String authorize() { return "https://openapi.baidu.com/oauth/2.0/authorize"; @@ -192,21 +142,11 @@ 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 */ - CSDN { + CSDN(AuthCsdnRequest.class) { @Override public String authorize() { return "https://api.csdn.net/oauth2/authorize"; @@ -221,16 +161,6 @@ 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, @@ -238,7 +168,7 @@ public enum AuthDefaultSource implements AuthSource { * 参考 https://help.coding.net/docs/project/open/oauth.html#%E7%94%A8%E6%88%B7%E6%8E%88%E6%9D%83 中的说明, * 新版的 coding API 地址需要传入用户团队名,这儿使用动态参数,方便在 request 中使用 */ - CODING { + CODING(AuthCodingRequest.class) { @Override public String authorize() { return "https://%s.coding.net/oauth_authorize.html"; @@ -253,21 +183,11 @@ 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 开源中国 */ - OSCHINA { + OSCHINA(AuthOschinaRequest.class) { @Override public String authorize() { return "https://www.oschina.net/action/oauth2/authorize"; @@ -282,21 +202,11 @@ 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); - } }, /** * 支付宝 */ - ALIPAY { + ALIPAY(AuthAlipayRequest.class) { @Override public String authorize() { return "https://openauth.alipay.com/oauth2/publicAppAuthorize.htm"; @@ -311,21 +221,11 @@ 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 */ - QQ { + QQ(AuthQqRequest.class) { @Override public String authorize() { return "https://graph.qq.com/oauth2.0/authorize"; @@ -345,21 +245,11 @@ 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); - } }, /** * 微信开放平台 */ - WECHAT_OPEN { + WECHAT_OPEN(AuthWeChatOpenRequest.class) { @Override public String authorize() { return "https://open.weixin.qq.com/connect/qrconnect"; @@ -379,21 +269,11 @@ 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); - } }, /** * 微信公众平台 */ - WECHAT_MP { + WECHAT_MP(AuthWeChatMpRequest.class) { @Override public String authorize() { return "https://open.weixin.qq.com/connect/oauth2/authorize"; @@ -413,21 +293,11 @@ 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); - } }, /** * 淘宝 */ - TAOBAO { + TAOBAO(AuthTaobaoRequest.class) { @Override public String authorize() { return "https://oauth.taobao.com/authorize"; @@ -442,21 +312,11 @@ 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 */ - GOOGLE { + GOOGLE(AuthGoogleRequest.class) { @Override public String authorize() { return "https://accounts.google.com/o/oauth2/v2/auth"; @@ -471,21 +331,11 @@ 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 */ - FACEBOOK { + FACEBOOK(AuthFacebookRequest.class) { @Override public String authorize() { return "https://www.facebook.com/v10.0/dialog/oauth"; @@ -500,21 +350,11 @@ 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); - } }, /** * 抖音 */ - DOUYIN { + DOUYIN(AuthDouyinRequest.class) { @Override public String authorize() { return "https://open.douyin.com/platform/oauth/connect"; @@ -534,21 +374,11 @@ 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); - } }, /** * 领英 */ - LINKEDIN { + LINKEDIN(AuthLinkedinRequest.class) { @Override public String authorize() { return "https://www.linkedin.com/oauth/v2/authorization"; @@ -568,21 +398,11 @@ 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); - } }, /** * 微软 */ - MICROSOFT { + MICROSOFT(AuthMicrosoftRequest.class) { @Override public String authorize() { return "https://login.microsoftonline.com/common/oauth2/v2.0/authorize"; @@ -602,21 +422,11 @@ 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); - } }, /** * 小米 */ - MI { + MI(AuthMiRequest.class) { @Override public String authorize() { return "https://account.xiaomi.com/oauth2/authorize"; @@ -636,21 +446,11 @@ 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); - } }, /** * 今日头条 */ - TOUTIAO { + TOUTIAO(AuthToutiaoRequest.class) { @Override public String authorize() { return "https://open.snssdk.com/auth/authorize"; @@ -665,21 +465,11 @@ 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 */ - TEAMBITION { + TEAMBITION(AuthTeambitionRequest.class) { @Override public String authorize() { return "https://account.teambition.com/oauth2/authorize"; @@ -699,22 +489,12 @@ 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); - } }, /** * 人人网 */ - RENREN { + RENREN(AuthRenrenRequest.class) { @Override public String authorize() { return "https://graph.renren.com/oauth/authorize"; @@ -734,22 +514,12 @@ 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); - } }, /** * Pinterest */ - PINTEREST { + PINTEREST(AuthPinterestRequest.class) { @Override public String authorize() { return "https://api.pinterest.com/oauth"; @@ -764,22 +534,12 @@ 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); - } }, /** * Stack Overflow */ - STACK_OVERFLOW { + STACK_OVERFLOW(AuthStackOverflowRequest.class) { @Override public String authorize() { return "https://stackoverflow.com/oauth"; @@ -794,16 +554,6 @@ 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); - } }, /** @@ -811,7 +561,7 @@ public enum AuthDefaultSource implements AuthSource { * * @since 1.10.0 */ - HUAWEI { + HUAWEI(AuthHuaweiRequest.class) { @Override public String authorize() { return "https://oauth-login.cloud.huawei.com/oauth2/v2/authorize"; @@ -831,16 +581,6 @@ 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); - } }, /** @@ -848,7 +588,7 @@ public enum AuthDefaultSource implements AuthSource { * * @since 1.10.0 */ - WECHAT_ENTERPRISE { + WECHAT_ENTERPRISE(AuthWeChatEnterpriseQrcodeRequest.class) { @Override public String authorize() { return "https://open.work.weixin.qq.com/wwopen/sso/qrConnect"; @@ -863,22 +603,12 @@ 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); - } }, /** * 企业微信网页登录 */ - WECHAT_ENTERPRISE_WEB { + WECHAT_ENTERPRISE_WEB(AuthWeChatEnterpriseWebRequest.class) { @Override public String authorize() { return "https://open.weixin.qq.com/connect/oauth2/authorize"; @@ -893,16 +623,6 @@ 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); - } }, /** @@ -910,7 +630,7 @@ public enum AuthDefaultSource implements AuthSource { * * @since 1.11.0 */ - KUJIALE { + KUJIALE(AuthKujialeRequest.class) { @Override public String authorize() { return "https://oauth.kujiale.com/oauth2/show"; @@ -930,16 +650,6 @@ 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); - } }, /** @@ -947,7 +657,7 @@ public enum AuthDefaultSource implements AuthSource { * * @since 1.11.0 */ - GITLAB { + GITLAB(AuthGitlabRequest.class) { @Override public String authorize() { return "https://gitlab.com/oauth/authorize"; @@ -962,16 +672,6 @@ 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); - } }, /** @@ -979,7 +679,7 @@ public enum AuthDefaultSource implements AuthSource { * * @since 1.12.0 */ - MEITUAN { + MEITUAN(AuthMeituanRequest.class) { @Override public String authorize() { return "https://openapi.waimai.meituan.com/oauth/authorize"; @@ -999,16 +699,6 @@ 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); - } }, /** @@ -1018,7 +708,7 @@ public enum AuthDefaultSource implements AuthSource { * * @since 1.12.0 */ - ELEME { + ELEME(AuthElemeRequest.class) { @Override public String authorize() { return "https://open-api.shop.ele.me/authorize"; @@ -1038,16 +728,6 @@ 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); - } }, /** @@ -1055,7 +735,7 @@ public enum AuthDefaultSource implements AuthSource { * * @since 1.13.0 */ - TWITTER { + TWITTER(AuthTwitterRequest.class) { @Override public String authorize() { return "https://api.twitter.com/oauth/authenticate"; @@ -1070,16 +750,6 @@ 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); - } }, /** @@ -1089,7 +759,7 @@ public enum AuthDefaultSource implements AuthSource { * * @since 1.15.9 */ - FEISHU { + FEISHU(AuthFeishuRequest.class) { @Override public String authorize() { return "https://open.feishu.cn/open-apis/authen/v1/index"; @@ -1109,23 +779,13 @@ 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); - } }, /** * 京东 * * @since 1.15.0 */ - JD { + JD(AuthJdRequest.class) { @Override public String authorize() { return "https://open-oauth.jd.com/oauth2/to_login"; @@ -1145,22 +805,12 @@ 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); - } }, /** * 阿里云 */ - ALIYUN { + ALIYUN(AuthAliyunRequest.class) { @Override public String authorize() { return "https://signin.aliyun.com/oauth2/v1/auth"; @@ -1180,22 +830,12 @@ 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); - } }, /** * 喜马拉雅 */ - XMLY { + XMLY(AuthXmlyRequest.class) { @Override public String authorize() { return "https://api.ximalaya.com/oauth2/js/authorize"; @@ -1215,16 +855,6 @@ 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); - } }, /** @@ -1232,7 +862,7 @@ public enum AuthDefaultSource implements AuthSource { * * @since 1.16.0 */ - AMAZON { + AMAZON(AuthAmazonRequest.class) { @Override public String authorize() { return "https://www.amazon.com/ap/oa"; @@ -1252,23 +882,13 @@ 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 * * @since 1.16.0 */ - SLACK { + SLACK(AuthSlackRequest.class) { @Override public String authorize() { return "https://slack.com/oauth/v2/authorize"; @@ -1295,23 +915,13 @@ 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 * * @since 1.16.0 */ - LINE { + LINE(AuthLineRequest.class) { @Override public String authorize() { return "https://access.line.me/oauth2/v2.1/authorize"; @@ -1327,16 +937,6 @@ 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"; @@ -1346,7 +946,6 @@ public enum AuthDefaultSource implements AuthSource { public String revoke() { return "https://api.line.me/oauth2/v2.1/revoke"; } - }, /** * Okta, @@ -1355,7 +954,7 @@ public enum AuthDefaultSource implements AuthSource { * * @since 1.16.0 */ - OKTA { + OKTA(AuthOktaRequest.class) { @Override public String authorize() { return "https://%s.okta.com/oauth2/%s/v1/authorize"; @@ -1380,23 +979,13 @@ 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); - } }, /** * 程序员客栈 * * @since 1.16.2 */ - PROGINN { + PROGINN(AuthProginnRequest.class) { @Override public String authorize() { return "https://www.proginn.com/oauth2/authorize"; @@ -1411,44 +1000,49 @@ 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); - } + /** 对应的实现类 */ + private Class targetClass; - @Override - public AuthRequest getAuthRequestInstance(AuthConfig authConfig, AuthStateCache authStateCache) { - return getInstance(AuthProginnRequest.class,authConfig,authStateCache); - } - }; + AuthDefaultSource(Class targetClass) { + this.targetClass = targetClass; + } + + /** + * 根据source获取对应的AuthSource枚举 + * @param source 枚举名 + * @return AuthDefaultSource + */ + public static AuthDefaultSource getAuthSource(String source){ + return Arrays.stream(AuthDefaultSource.values()).filter(authSource -> authSource.name().equalsIgnoreCase(source)).findAny().orElseThrow(()->new AuthException("未获取到有效的AuthSource配置")); + } + + /** + * 根据配置获取 AuthRequest 实例 + * @param authConfig 配置 + * @return AuthRequest + */ + public AuthRequest getAuthRequestInstance(AuthConfig authConfig) { + return getAuthRequestInstance(authConfig,null); + } /** * 利用反射 生成 AuthRequest 实例 - * @param cl 目标 class * @param authConfig 配置 * @param authStateCache 缓存配置 * @return AuthRequest */ - AuthRequest getInstance(Class cl, AuthConfig authConfig, AuthStateCache authStateCache) { + public AuthRequest getAuthRequestInstance(AuthConfig authConfig, AuthStateCache authStateCache) { try { - Class clazz = Class.forName(cl.getName()); if(authStateCache==null){ - return (AuthRequest) clazz.getDeclaredConstructor(AuthConfig.class).newInstance(authConfig); + return this.targetClass.getDeclaredConstructor(AuthConfig.class).newInstance(authConfig); }else{ - return (AuthRequest) clazz.getDeclaredConstructor(AuthConfig.class, AuthStateCache.class).newInstance(authConfig, authStateCache); + return this.targetClass.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配置")); - } } diff --git a/src/main/java/me/zhyd/oauth/config/AuthSource.java b/src/main/java/me/zhyd/oauth/config/AuthSource.java index db67a75..a6cde64 100644 --- a/src/main/java/me/zhyd/oauth/config/AuthSource.java +++ b/src/main/java/me/zhyd/oauth/config/AuthSource.java @@ -1,10 +1,8 @@ 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地址的统一接口,提供以下方法: @@ -46,21 +44,6 @@ 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 * diff --git a/src/test/java/me/zhyd/oauth/config/AuthExtendSource.java b/src/test/java/me/zhyd/oauth/config/AuthExtendSource.java index 4101f06..9f57097 100644 --- a/src/test/java/me/zhyd/oauth/config/AuthExtendSource.java +++ b/src/test/java/me/zhyd/oauth/config/AuthExtendSource.java @@ -2,11 +2,10 @@ package me.zhyd.oauth.config; import me.zhyd.oauth.cache.AuthStateCache; import me.zhyd.oauth.exception.AuthException; +import me.zhyd.oauth.request.AuthDefaultRequest; import me.zhyd.oauth.request.AuthExtendRequest; import me.zhyd.oauth.request.AuthRequest; -import java.lang.reflect.Constructor; - /** * 测试自定义实现{@link AuthSource}接口后的枚举类 * @@ -16,7 +15,7 @@ import java.lang.reflect.Constructor; */ public enum AuthExtendSource implements AuthSource { - OTHER { + OTHER (AuthExtendRequest.class){ /** * 授权的api * @@ -47,32 +46,6 @@ 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 * @@ -92,5 +65,28 @@ public enum AuthExtendSource implements AuthSource { public String refresh() { return null; } + }; + + private Class targetClass; + + AuthExtendSource(Class targetClass) { + this.targetClass = targetClass; + } + + public AuthRequest getAuthRequestInstance(AuthConfig authConfig) { + return this.getAuthRequestInstance(authConfig,null); + } + + public AuthRequest getAuthRequestInstance(AuthConfig authConfig, AuthStateCache authStateCache) { + try { + if(authStateCache==null){ + return this.targetClass.getDeclaredConstructor(AuthConfig.class).newInstance(authConfig); + }else{ + return this.targetClass.getDeclaredConstructor(AuthConfig.class, AuthStateCache.class).newInstance(authConfig, authStateCache); + } + } catch (Exception e) { + throw new AuthException("未获取到有效的Auth配置"); + } } + } diff --git a/src/test/java/me/zhyd/oauth/request/AuthWeChatMpRequestTest.java b/src/test/java/me/zhyd/oauth/request/AuthWeChatMpRequestTest.java index 14dff6f..c820d8f 100644 --- a/src/test/java/me/zhyd/oauth/request/AuthWeChatMpRequestTest.java +++ b/src/test/java/me/zhyd/oauth/request/AuthWeChatMpRequestTest.java @@ -3,6 +3,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.Assert; import org.junit.Test; public class AuthWeChatMpRequestTest { @@ -25,6 +26,7 @@ public class AuthWeChatMpRequestTest { .clientSecret("a") .redirectUri("https://www.justauth.cn") .build()); + Assert.assertTrue(request instanceof AuthWeChatMpRequest); System.out.println(request.authorize(AuthStateUtils.createState())); } } -- Gitee From 37b7784f89fd47c5f297a4d0c7d570a561f6b088 Mon Sep 17 00:00:00 2001 From: ngcly <531237716@qq.com> Date: Tue, 10 Aug 2021 10:24:36 +0800 Subject: [PATCH 4/6] =?UTF-8?q?=E6=A0=BC=E5=BC=8F=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/me/zhyd/oauth/request/AuthAlipayRequest.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/me/zhyd/oauth/request/AuthAlipayRequest.java b/src/main/java/me/zhyd/oauth/request/AuthAlipayRequest.java index 1457676..3afe5e6 100644 --- a/src/main/java/me/zhyd/oauth/request/AuthAlipayRequest.java +++ b/src/main/java/me/zhyd/oauth/request/AuthAlipayRequest.java @@ -39,10 +39,10 @@ public class AuthAlipayRequest extends AuthDefaultRequest { public AuthAlipayRequest(AuthConfig config, AuthStateCache authStateCache) { super(config, AuthDefaultSource.ALIPAY, authStateCache); - if(StringUtils.isNotEmpty(config.getProxyHost()) && config.getProxyPort()!=null){ + if (StringUtils.isNotEmpty(config.getProxyHost()) && config.getProxyPort() != null) { this.alipayClient = new DefaultAlipayClient(AuthDefaultSource.ALIPAY.accessToken(), config.getClientId(), config.getClientSecret(), "json", "UTF-8", config.getAlipayPublicKey(), "RSA2", config.getProxyHost(), config.getProxyPort()); - }else{ + } else { this.alipayClient = new DefaultAlipayClient(AuthDefaultSource.ALIPAY.accessToken(), config.getClientId(), config.getClientSecret(), "json", "UTF-8", config .getAlipayPublicKey(), "RSA2"); } @@ -59,7 +59,7 @@ public class AuthAlipayRequest extends AuthDefaultRequest { AlipaySystemOauthTokenRequest request = new AlipaySystemOauthTokenRequest(); request.setGrantType("authorization_code"); request.setCode(authCallback.getAuth_code()); - AlipaySystemOauthTokenResponse response = null; + AlipaySystemOauthTokenResponse response; try { response = this.alipayClient.execute(request); } catch (Exception e) { -- Gitee From e55033f4f57584d360d85e31fdff6bd5f6443057 Mon Sep 17 00:00:00 2001 From: ngcly <531237716@qq.com> Date: Tue, 10 Aug 2021 10:27:01 +0800 Subject: [PATCH 5/6] =?UTF-8?q?=E6=A0=BC=E5=BC=8F=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/me/zhyd/oauth/request/AuthAlipayRequest.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/me/zhyd/oauth/request/AuthAlipayRequest.java b/src/main/java/me/zhyd/oauth/request/AuthAlipayRequest.java index 3afe5e6..031bc96 100644 --- a/src/main/java/me/zhyd/oauth/request/AuthAlipayRequest.java +++ b/src/main/java/me/zhyd/oauth/request/AuthAlipayRequest.java @@ -43,8 +43,8 @@ public class AuthAlipayRequest extends AuthDefaultRequest { this.alipayClient = new DefaultAlipayClient(AuthDefaultSource.ALIPAY.accessToken(), config.getClientId(), config.getClientSecret(), "json", "UTF-8", config.getAlipayPublicKey(), "RSA2", config.getProxyHost(), config.getProxyPort()); } else { - this.alipayClient = new DefaultAlipayClient(AuthDefaultSource.ALIPAY.accessToken(), config.getClientId(), config.getClientSecret(), "json", "UTF-8", config - .getAlipayPublicKey(), "RSA2"); + this.alipayClient = new DefaultAlipayClient(AuthDefaultSource.ALIPAY.accessToken(), config.getClientId(), config.getClientSecret(), + "json", "UTF-8", config.getAlipayPublicKey(), "RSA2"); } } -- Gitee From b77de0bd0c12dd70e69d850f99131ba5b2906e86 Mon Sep 17 00:00:00 2001 From: ngcly <531237716@qq.com> Date: Tue, 10 Aug 2021 12:28:56 +0800 Subject: [PATCH 6/6] =?UTF-8?q?=E8=BF=98=E5=8E=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/me/zhyd/oauth/config/AuthConfig.java | 11 ----------- .../java/me/zhyd/oauth/request/AuthAlipayRequest.java | 8 ++++++-- 2 files changed, 6 insertions(+), 13 deletions(-) diff --git a/src/main/java/me/zhyd/oauth/config/AuthConfig.java b/src/main/java/me/zhyd/oauth/config/AuthConfig.java index e00e742..38f4ccc 100644 --- a/src/main/java/me/zhyd/oauth/config/AuthConfig.java +++ b/src/main/java/me/zhyd/oauth/config/AuthConfig.java @@ -155,7 +155,6 @@ 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} 的合法性。 @@ -164,16 +163,6 @@ public class AuthConfig { */ private boolean ignoreCheckRedirectUri; - /** - * 代理地址 - */ - private String proxyHost; - - /** - * 代理端口号 - */ - private Integer proxyPort; - /** * 适配 builder 模式 set 值的情况 * diff --git a/src/main/java/me/zhyd/oauth/request/AuthAlipayRequest.java b/src/main/java/me/zhyd/oauth/request/AuthAlipayRequest.java index 031bc96..e411645 100644 --- a/src/main/java/me/zhyd/oauth/request/AuthAlipayRequest.java +++ b/src/main/java/me/zhyd/oauth/request/AuthAlipayRequest.java @@ -21,6 +21,8 @@ import me.zhyd.oauth.model.AuthUser; import me.zhyd.oauth.utils.StringUtils; import me.zhyd.oauth.utils.UrlBuilder; +import java.net.InetSocketAddress; + /** * 支付宝登录 * @@ -39,9 +41,11 @@ public class AuthAlipayRequest extends AuthDefaultRequest { public AuthAlipayRequest(AuthConfig config, AuthStateCache authStateCache) { super(config, AuthDefaultSource.ALIPAY, authStateCache); - if (StringUtils.isNotEmpty(config.getProxyHost()) && config.getProxyPort() != null) { + if (config.getHttpConfig() != null && config.getHttpConfig().getProxy() != null + && config.getHttpConfig().getProxy().address() instanceof InetSocketAddress) { + InetSocketAddress address = (InetSocketAddress) config.getHttpConfig().getProxy().address(); this.alipayClient = new DefaultAlipayClient(AuthDefaultSource.ALIPAY.accessToken(), config.getClientId(), config.getClientSecret(), - "json", "UTF-8", config.getAlipayPublicKey(), "RSA2", config.getProxyHost(), config.getProxyPort()); + "json", "UTF-8", config.getAlipayPublicKey(), "RSA2", address.getHostName(), address.getPort()); } else { this.alipayClient = new DefaultAlipayClient(AuthDefaultSource.ALIPAY.accessToken(), config.getClientId(), config.getClientSecret(), "json", "UTF-8", config.getAlipayPublicKey(), "RSA2"); -- Gitee