首页>代码>Spring Boot整合Java开源OAuth库ScribeJava实现第三方用户登录授权实例,支持QQ,微信,微博等平台>/scribejava-oauth2/src/main/java/com/hellokoding/springboot/oauth2/OAuth2ServiceFactory.java
package com.hellokoding.springboot.oauth2;

import com.github.scribejava.core.builder.ServiceBuilder;
import com.github.scribejava.core.builder.api.DefaultApi20;
import com.github.scribejava.core.extractors.OAuth2AccessTokenExtractor;
import com.github.scribejava.core.extractors.OAuth2AccessTokenJsonExtractor;
import com.github.scribejava.core.extractors.TokenExtractor;
import com.github.scribejava.core.model.OAuth2AccessToken;
import com.github.scribejava.core.oauth.OAuth20Service;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Component;

import java.util.HashMap;
import java.util.Map;

@RequiredArgsConstructor
@Component
public class OAuth2ServiceFactory {
    private static Map<String, OAuth20Service> services = new HashMap<>();
    private final OAuth2Properties oAuth2Properties;

    public OAuth20Service getService(String serviceId) {
        if (services.containsKey(serviceId))
            return services.get(serviceId);

        OAuth2Properties.Registration registration = oAuth2Properties.getRegistration().get(serviceId);
        OAuth2Properties.Provider provider = oAuth2Properties.getProvider().get(serviceId);

        OAuth20Service oAuth20Service = new ServiceBuilder(registration.getClientId())
            .apiSecret(registration.getClientSecret())
            .callback(registration.getRedirectUri())
            .defaultScope(registration.getScope())
            .responseType(registration.getAuthorizationGrantType())
            .userAgent("HelloKoding")
            .build(new OAuth2Api(provider));
        services.put(serviceId, oAuth20Service);

        return oAuth20Service;
    }

    @RequiredArgsConstructor
    class OAuth2Api extends DefaultApi20 {
        private final OAuth2Properties.Provider provider;

        @Override
        public String getAccessTokenEndpoint() {
            return provider.getTokenUri();
        }

        @Override
        public String getAuthorizationBaseUrl() {
            return provider.getAuthorizationUri();
        }

        @Override
        public String getRevokeTokenEndpoint() {
            return provider.getRevokeTokenUri();
        }

        @Override
        public TokenExtractor<OAuth2AccessToken> getAccessTokenExtractor() {
            if ("github".equalsIgnoreCase(provider.getName()))
                return OAuth2AccessTokenExtractor.instance();

            return OAuth2AccessTokenJsonExtractor.instance();
        }

        public String getUserInfoEndpoint() {
            return provider.getUserInfoUri();
        }

        public String getUserNameAttribute() {
            return provider.getUserNameAttribute();
        }

        public String getRevokePermissionEndpoint() {
            return provider.getRevokePermissionUri();
        }
    }
}
最近下载更多
dfsyke  LV13 2020年11月1日
醉心客  LV5 2020年10月23日
最代码官方  LV167 2020年10月23日
最近浏览更多
叁卍石  LV3 3月20日
kaye7549317 1月16日
暂无贡献等级
mukoooo  LV2 2023年12月5日
hhsoft  LV1 2023年10月22日
601601lmy  LV5 2023年7月12日
guest0 2023年5月22日
暂无贡献等级
1529860026  LV24 2023年4月20日
神龙摆尾无拘束  LV2 2023年3月17日
微信网友_6263159342649344  LV7 2022年12月16日
暂无贡献等级
顶部 客服 微信二维码 底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友