我写的代码:
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.oauth2.client.DefaultOAuth2ClientContext;
import org.springframework.security.oauth2.client.OAuth2RestOperations;
import org.springframework.security.oauth2.client.OAuth2RestTemplate;
import org.springframework.security.oauth2.client.resource.OAuth2ProtectedResourceDetails;
import org.springframework.security.oauth2.client.token.AccessTokenRequest;
import org.springframework.security.oauth2.client.token.DefaultAccessTokenRequest;
import org.springframework.security.oauth2.client.token.grant.client.ClientCredentialsResourceDetails;
import org.springframework.security.oauth2.config.annotation.web.configuration.EnableOAuth2Client;
@EnableOAuth2Client
@Configuration
public class OAuth2SecurityConfig {
private static Logger logger = LoggerFactory.getLogger(OAuth2SecurityConfig.class);
@Value("${tokenUrl}")
private String tokenUrl;
@Value("${oauthClientId}")
private String oauthClientId;
@Value("${oauthClientPassword}")
private String oauthClientPassword;
@Value("${oauthGrantType}")
private String oauthGrantType;
@Bean
protected OAuth2ProtectedResourceDetails resourceDetails() {
logger.info("inside resourceDetails");
ClientCredentialsResourceDetails resourceDetails = new ClientCredentialsResourceDetails();
resourceDetails.setAccessTokenUri(tokenUrl);
resourceDetails.setClientId(oauthClientId);
resourceDetails.setClientSecret(oauthClientPassword);
resourceDetails.setGrantType(oauthGrantType);
logger.info("resourceDetails: "+ resourceDetails.toString());
logger.info("resourceDetails: "+ resourceDetails.getAccessTokenUri());
return resourceDetails;
}
@Bean
public OAuth2RestOperations restTemplateToken() {
logger.info("inside restTemplateToken");
AccessTokenRequest request = new DefaultAccessTokenRequest();
return new OAuth2RestTemplate(resourceDetails(), new DefaultOAuth2ClientContext(request));
}
}
在自动装配 OAuth2RestOperations 后,我在其中访问令牌的文件我给了这一行以获取它:
@Autowired
private OAuth2RestOperations restTemplateToken;
里面的方法......
OAuth2AccessToken accessToken = restTemplateToken.getAccessToken();
当我执行它时,我收到如下错误:
error="access_denied", error_description="请求访问令牌时出错。"
不知道为什么会失败。请帮忙。 谢谢。