2016-02-12 550 views
0

我有@ EnableOAuth2Sso启用前端应用程序。另外,我想使用自定义的OAuth2ProtectedResourceDetails注入所有OAuth2RestTemplate bean(尤其是重新定义OAuth2RestOperationsConfiguration中OAuth2RestTemplate的行为)。 我刚刚为OAuth2ProtectedResourceDetails定义了自己的bean,但OAuth2RestTemplate仍使用AuthorizationCodeResourceDetails)。如何设置自定义OAuth2RestTemplate或自定义OAuth2ProtectedResourceDetails?

@SpringBootApplication(scanBasePackages = {"base.package"}) 
@EnableOAuth2Sso 
@EnableZuulProxy 
public class Application extends WebSecurityConfigurerAdapter { 

public static void main(String[] args) { 
    SpringApplication.run(Application.class, args); 
} 

@Autowired 
private RedirectUriResolver redirectUriResolver; 

@Override 
public void configure(HttpSecurity http) throws Exception { 
    // some http configuration 
} 

@Bean 
public OAuth2ProtectedResourceDetails resource() { 
    AuthorizationCodeResourceDetails resource = new CustomAuthorizationCodeResourceDetails(redirectUriResolver); 
    return resource; 
} 
} 

我应该以某种方式或只是这个OAuth2ProtectedResourceDetails重新定义整个OAuth2RestTemplate豆?

回答

0

你应该能够重载得到安装在OAuth2RestOperationsConfiguration用自己的豆子

@Bean 
    @ConfigurationProperties("security.oauth2.client") 
    public ClientCredentialsResourceDetails oauth2RemoteResource() { 
     ClientCredentialsResourceDetails details = new ClientCredentialsResourceDetails(); 
     return details; 
    } 

如果没有,只是创建自己的豆子

@Bean 
@ConfigurationProperties("security.oauth2.client") 
public ClientCredentialsResourceDetails customOauth2RemoteResource() { 
    ClientCredentialsResourceDetails details = new ClientCredentialsResourceDetails(); 
    return details; 
} 

@Bean 
public OAuth2RestTemplate customOauth2RestTemplate() { 
    OAuth2RestTemplate template = new OAuth2RestTemplate(customOauth2RemoteResource(), 
      new DefaultOAuth2ClientContext()); 
    return template; 
} 

然后使用@Qualifier引用它们

@Autowired 
@Qualifier("customOauth2RestTemplate") 
private RestTemplate restTemplate;