All Downloads are FREE. Search and download functionalities are using the official Maven repository.

top.dcenter.ums.security.social.provider.weibo.connect.WeiboOAuth2Template Maven / Gradle / Ivy

package top.dcenter.ums.security.social.provider.weibo.connect;

import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.converter.StringHttpMessageConverter;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
import org.springframework.social.oauth2.AccessGrant;
import org.springframework.social.oauth2.OAuth2Template;
import org.springframework.util.MultiValueMap;
import org.springframework.web.client.RestClientException;
import org.springframework.web.client.RestTemplate;
import top.dcenter.ums.security.social.provider.gitee.adapter.StringJsonMessageConverterExtractor;

import java.nio.charset.StandardCharsets;
import java.util.List;
import java.util.stream.Collectors;

import static top.dcenter.ums.security.core.consts.SecurityConstants.KEY_VALUE_SEPARATOR;
import static top.dcenter.ums.security.core.consts.SecurityConstants.URL_PARAMETER_IDENTIFIER;
import static top.dcenter.ums.security.core.consts.SecurityConstants.URL_PARAMETER_SEPARATOR;

/**
 * WeiboOAuth2Template
 * @author edva8332
 * @author zyw
 */
@SuppressWarnings("AlibabaClassNamingShouldBeCamel")
@Slf4j
public class WeiboOAuth2Template extends OAuth2Template {

    private ObjectMapper objectMapper;

    public WeiboOAuth2Template(String clientId, String clientSecret,
                               String authorizeUrl,
                               String accessTokenUrl, ObjectMapper objectMapper) {
        super(clientId, clientSecret,
              authorizeUrl,
              accessTokenUrl);
        setUseParametersForClientAuthentication(true);
        this.objectMapper = objectMapper;
    }

    @SuppressWarnings("DuplicatedCode")
    @Override
    protected RestTemplate createRestTemplate() {

        RestTemplate restTemplate = super.createRestTemplate();
        List> messageConverters = restTemplate.getMessageConverters();
        // 替换 json处理器
        messageConverters.removeIf((c) -> c instanceof MappingJackson2HttpMessageConverter);
        messageConverters.add(new StringJsonMessageConverterExtractor());
        // 添加处理 html 格式的消息体转换器
        messageConverters.add(new StringHttpMessageConverter(StandardCharsets.UTF_8));

        return restTemplate;
    }

    @Override
    @SuppressWarnings("unchecked")
    protected AccessGrant postForAccessGrant(String accessTokenUrl,
                                             MultiValueMap parameters) {

        String params = parameters.toSingleValueMap()
                .entrySet()
                .stream()
                .map(entry -> (entry.getKey() + KEY_VALUE_SEPARATOR + entry.getValue()))
                .collect(Collectors.joining(URL_PARAMETER_SEPARATOR));

        String url = accessTokenUrl + URL_PARAMETER_IDENTIFIER + params;

        WeiboAccessGrant weiboAccessGrant;
        try
        {
            String responseResult = getRestTemplate().postForObject(url, null, String.class);
            weiboAccessGrant = objectMapper.readValue(responseResult, WeiboAccessGrant.class);
        }
        catch (Exception e)
        {
            log.error(e.getMessage(), e);
            throw new RestClientException(e.getMessage(), e);
        }
        return weiboAccessGrant;

    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy