Http服务化改造实践(二)

WilliamGates
发布于 2022-6-21 16:17
浏览
0收藏

 

3、实现签名校验

 

上述只是简单实用Feign,接下来以实现签名校验为例展示Feign的扩展机制。

 

签名验证是最常见的安全机制,首先在客户端定义一个签名拦截器,用于生成签名信息,示范代码如下图所示:

public class AuthRequestInterceptor implements feign.RequestInterceptor {
 private TokenService tokenService;

 public AuthRequestInterceptor(TokenService tokenService) {
  this.tokenService = tokenService;
 }

 @Override
 public void apply(RequestTemplate template) {
  template.header("token", tokenService.getToken());
 }

}

 

并且在Feign的全局配置文件中创建对应的拦截器,示例代码如下:

public class FeignConfiguration {
  @Bean
 public RequestInterceptor authRequestInterceptor(ResourceIdentity resourceIdentity) {
  AuthRequestInterceptor authRequestInterceptor = new AuthRequestInterceptor(resourceIdentity);
  authRequestInterceptor.setErrorEncodeType(errorEncodeType);
  return authRequestInterceptor;
 }
}

 

同时在服务端获取token并对token进行校验,示例代码如下:

@Component
public class AuthFilter implements Filter {

 @Autowired
 private TokenService tokeService;

 @Override
 public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
  String remoteToken = ((HttpServletRequest) servletRequest).getHeader("token");
  if(!tokeService.valid(token)) {
      //异常处理逻辑
      return;
    }
  filterChain.doFilter(servletRequest, servletResponse);
 }
}

 

4、服务端自动生成Feign

 

上面的示例虽然实现了服务接口的声明式管理,但调用端、客户端并没有显示的约束关系,接下来展示如何使用客户端、服务端使用继承方式定义服务调用API。

 

例如要实现如下图的效果:

Http服务化改造实践(二)-鸿蒙开发者社区

原生的Feign无法实现该效果,我们需要使用OpenFeign类库,两者之间的对比如下图所示:

Http服务化改造实践(二)-鸿蒙开发者社区

接下来详细介绍具体实现方法。

 

4.1 提取公共API
首先使用一个模块定义公共API,需要引入maven依赖,代码示例如下所示:

 <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>

 

接下来定义公共的服务接口,客户端、服务端都需要实现该接口,公共服务端接口定义如下:

public interface IUserController {
 @RequestMapping(value = "user/list-all", method = {RequestMethod.GET})
 List<String> listAll(@RequestParam String name);
}

 

文章转自公众号:中间件兴趣圈

标签
已于2022-6-21 16:17:05修改
收藏
回复
举报
回复
    相关推荐