spring-cloud-starter-feign 组件在spring boot中的应用:访问Oauth2资源服务器的资源接口
来源:互联网 发布:赣州淘宝培训 编辑:程序博客网 时间:2024/05/07 02:36
spring-cloud-starter-feign 组件在spring boot中的应用:
访问Oauth2资源服务器的资源接口
如果对https://github.com/OpenFeign/feign 不了解的,可以去官网浏览一下。由于spring对其扩展,我们可以利用spring的注解及spring boot 的特性来使用该组件,可参考文档:http://cloud.spring.io/spring-cloud-static/Dalston.SR1/#spring-cloud-feign 。
下面的例子是spring boot项目中,访问Oauth2资源服务器的资源接口(非集群环境下)。
maven pom文件需要引入对spring cloud相关依赖:
<dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-dependencies</artifactId> <version>${spring-boot.version}</version> <type>pom</type> <scope>import</scope> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>Dalston.SR1</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>
为了使用feign组件,我们增加依赖:
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-config</artifactId> <exclusions> <!--配置中心去掉,会自动连接 --> <exclusion> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-config-client</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-feign</artifactId> </dependency> <dependency> <groupId>com.netflix.feign</groupId> <artifactId>feign-okhttp</artifactId> <version>8.18.0</version> </dependency>
为了使用spring boot 的自动配置,我们需要引入 @EnableFeignClients 注解,自动扫描Feign相关代码。
@SpringBootApplication( exclude = {DataSourceAutoConfiguration.class, MybatisAutoConfiguration.class, JpaRepositoriesAutoConfiguration.class, HibernateJpaAutoConfiguration.class}, scanBasePackages = {"com.sdcuike.practice", "com.sdcuike.spring.controller.advice"})@EnableFeignClients@Slf4jpublic class Application { public static void main(String[] args) throws UnknownHostException { SpringBootApplicationUtil.runSpringBootApplication(log, args, Application.class); } }
为了访问资源服务器上的资源,我们定义demo接口:
/** * Created by beaver on 2017/5/27.<br> * <p> * {@link https://jmnarloch.wordpress.com/2015/10/14/spring-cloud-feign-oauth2-authentication } */@FeignClient(name = "exampleService", url = "${exampleService.ribbon.listOfServers}", configuration = {OAuth2FeignAutoConfiguration.class})@RequestMapping(value = "/springBoot/example" , consumes = MediaType.APPLICATION_JSON_UTF8_VALUE , produces = MediaType.APPLICATION_JSON_UTF8_VALUE)public interface ExampleServiceFeignClient { @GetMapping("/") ModelResult<String> home();}
由于spring-cloud-feign对feign做了扩展,所以,我们可以使用spring的web相关注解,来使用feign,大大方便了我们的spring 应用。其关键的配置在于:
@FeignClient(name = "exampleService", url = "${exampleService.ribbon.listOfServers}", configuration = {OAuth2FeignAutoConfiguration.class})
OAuth2FeignAutoConfiguration类主要是feign组件利用Oauth2的认证token来访问资源服务器上的资源。
/** * Created by beaver on 2017/6/3. */@Configurationpublic class OAuth2FeignAutoConfiguration { @Bean public RequestInterceptor oauth2FeignRequestInterceptor(@Qualifier("practiceOAuth2RestTemplate") OAuth2RestTemplate oAuth2RestTemplate) { return new OAuth2FeignRequestInterceptor(oAuth2RestTemplate); }}
/** * Created by beaver on 2017/6/3. */public class OAuth2FeignRequestInterceptor implements RequestInterceptor { private final Logger LOGGER = LoggerFactory.getLogger(getClass()); private static final String AUTHORIZATION_HEADER = "Authorization"; private static final String BEARER_TOKEN_TYPE = "Bearer"; private final OAuth2RestTemplate oAuth2RestTemplate; public OAuth2FeignRequestInterceptor(OAuth2RestTemplate oAuth2RestTemplate) { Assert.notNull(oAuth2RestTemplate, "Context can not be null"); this.oAuth2RestTemplate = oAuth2RestTemplate; } @Override public void apply(RequestTemplate template) { LOGGER.debug("Constructing Header {} for Token {}", AUTHORIZATION_HEADER, BEARER_TOKEN_TYPE); template.header(AUTHORIZATION_HEADER, String.format("%s %s", BEARER_TOKEN_TYPE, oAuth2RestTemplate.getAccessToken().toString())); }}
其主要思路是利用feign的的扩展RequestInterceptor,对于每次请求我们自动设置Oauth2的AccessToken 头信息。
对于Oauth2ClientConfig 的配置在此不再复述,具体请看代码:
https://github.com/sdcuike/spring-boot-oauth2-demo/tree/blog-2017-07-16/spring-boot-oauth-resource-server/src/main/java/com/sdcuike/practice
阅读全文
0 0
- spring-cloud-starter-feign 组件在spring boot中的应用:访问Oauth2资源服务器的资源接口
- spring cloud oauth2 feign 遇到的坑
- 四、Spring Cloud 的 Feign 组件
- Spring Cloud 的 Feign 组件 自定义配置
- 【Spring Cloud】Feign接口调用
- spring boot访问静态资源
- Spring中的资源访问
- spring中的资源访问
- spring-boot-starter-data-rest 资源暴露策略设置 RepositoryDetectionStrategies
- spring cloud使用Feign实现远程接口的调用
- Spring Cloud中如何优雅的使用Feign调用接口
- Spring的资源访问
- Spring的资源访问
- Spring Boot和Spring Cloud学习资源推荐
- Spring Boot和Spring Cloud学习资源推荐
- Spring Boot应用中Messages资源信息在Thymeleaf中的显示错误问题
- 10.7、spring boot的web应用——访问静态资源
- Spring Boot的资源集合
- inline 内联函数 constexper 函数 函数重载与函数匹配
- java-day07-Thread-线程调度
- java.lang.string.split用法
- VS2015动态库编程之MFC规则动态库(上)
- 关于free与malloc的使用
- spring-cloud-starter-feign 组件在spring boot中的应用:访问Oauth2资源服务器的资源接口
- SVN
- lambda 表达式
- Java BigDecimal 不用科学计数法输出,去前导零 51Nod 1873
- mongDao
- c++:使用*号打印三角形
- JS元素中属性的规范使用
- 第六天学习java-数组
- Linux中,texinfo-6.4 编译安装说明