Spring cloud初识Feign

本文介绍了如何使用Spring Cloud Feign实现微服务间的调用,包括服务提供者和消费者的配置及代码实现。

fegin整合了hystrix和ribbon。在ribbon中我们通过使用RestTemplate来实现对远程服务的调用,但是在代码的编写上并不美观,Spring Cloud给出了另一套方案,也即是本篇中提到的Feign,Spring Cloud Feign 是基于Netflix Feign 实现的。

下面通过搭建一个通过feign调用服务的例子:

服务提供方:

pom.xml:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <parent>
    <groupId>com.dbs</groupId>
    <artifactId>zsy-parent</artifactId>
    <version>0.0.1-SNAPSHOT</version>
  </parent>
  <artifactId>project-service-client</artifactId>
</project>

application.properties:

server.port=2222
spring.application.name=provide-clinet
#设置本微服务需要挂载的服务治理的地址
eureka.client.serviceUrl.defaultZone=http://10.10.1.73:1111/eureka/
#设置本服务将地址转换为服务机器的IP
eureka.instance.prefer-ip-address=true
eureka.instance.instanceId=${spring.application.name}:${spring.application.instance_id:${server.port}}

启动类:

@SpringBootApplication
@EnableDiscoveryClient
public class ProvideClientApplication {


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

	}

}

服务提供Controller:

此类通过@RequestMapping注解提供的方法可供服务调用方调用.

@RestController
@RefreshScope
public class helloController {

    @Value("${urlname}")
    private String bar;

    @RequestMapping("/app")
    public  String hello() {
    	System.out.println("--------------------------"+bar);
        return "Hello " + bar + "!";
    }
    
    @RequestMapping(value="/test/{id}")
    public  String hello1(@PathVariable String id) {
    	System.out.println("---------------------++-----"+id);
        return "Hello " +id+ bar + "!";
    }
}

 

服务调用方:

pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <parent>
    <groupId>com.zsy</groupId>
    <artifactId>zsy-parent</artifactId>
    <version>0.0.1-SNAPSHOT</version>
  </parent>
  <artifactId>project-service-feign</artifactId>
  <dependencies>
  		<!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-feign -->
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-feign</artifactId>
		</dependency>
  </dependencies>
</project>

application.properties:

#设置本微服务的名称
spring.application.name=feign-client
#设置本微服务的端口
server.port=11102
#设置本微服务需要挂载的服务治理的地址
eureka.client.serviceUrl.defaultZone=http://10.10.1.73:1111/eureka/
#设置本服务将地址转换为服务机器的IP
eureka.instance.prefer-ip-address=true
eureka.instance.instanceId=${spring.application.name}:${spring.application.instance_id:${server.port}}

启动类:

@EnableDiscoveryClient
@SpringBootApplication
@EnableFeignClients
public class FeignClientApplication {
	
	public static void main(String[] args) {
		 SpringApplication.run(FeignClientApplication.class, args);
	}

}

 

服务调用Service:

@RequestMapping(value ="/test/{id}", method = RequestMethod.GET)对应服务提供方Controller的方法。

//name的值为微服务的名称
@FeignClient(name="provide-clinet")
public interface TestFeignRequestService {
		@RequestMapping(value ="/test/{id}", method = RequestMethod.GET)
		public String  test(@PathVariable("id") String id) ;
		
		
}

服务调用Controller:


@RestController
public class FeignRequestController {
	
	@Autowired
	private TestFeignRequestService  testFeignRequestService;
	
	@RequestMapping("/feigntest/{id}")
	public String test(@PathVariable String id) {
			String  str =	testFeignRequestService.test(id);
			return str +"--------"+id;
	}

}

一个简单的服务提供和服务调用例子就介绍完毕了。

内容概要:本文详细记录了对一个Android ARM64静态ELF文件中字符串加密机制的逆向分析过程。该ELF文件的所有字符串均被加密,无法通过常规strings命令或IDA直接识别。作者通过分析发现,加密字符串存储在.rodata段,其解密所需信息(包括密文地址、长度和16位密钥)保存在.data.rel.ro段的40字节描述符中。核心解密函数sub_10F408采用自反的双pass流密码算法,结合固定密钥KEY_TERM(由.data段24字节数据计算得出),实现字节级非线性、位置与长度相关的加密。文章还复现了完整的Python解密脚本,并揭示了该保护机制的本质为代码混淆而非强加密,最终成功批量解密全部956条字符串,暴露程序真实行为,如shell命令模板、设备标识篡改、网络重置等操作。此外,文中还提及未启用的自定义壳框架及其反dump设计。; 适合人群:具备逆向工程基础的安全研究人员、二进制分析人员及对ELF保护技术感兴趣的开发者。; 使用场景及目标:①学习ELF二进制中字符串加密的典型实现方式与逆向突破口;②掌握从结构识别、函数追踪到算法还原的完整逆向流程;③理解“绑定二进制”的完整性校验设计及其局限性;④实践编写IDAPython脚本自动化提取与解密敏感数据。; 阅读建议:此资源以实战案例驱动,不仅展示技术细节,更强调逆向思维与验证方法,建议读者结合IDA调试环境,逐步跟随文中步骤进行动态分析与算法验证,深入理解每一步的推理依据。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值