Zuul之身份认证

 

Zuul之身份认证

微服务架构所面临的问题?

1)针对某个功能,客户端在微服务架构的情况下需要请求多个模块接口

2)针对于身份认证、日志、流量控制等公共模块每个微服务都需要做一遍,不利于业务与非业务的拆分

Zuul可以做什么

1)客户端只需要知道网关而不需要知道具体模块的地址,所有服务由网关对外提供

2)身份认证类的东西单独抽象出来,业务模块只做业务

3)易于监控。可在微服务网关收集监控数据并将其推送到外部系统进行分析。

Zuul如何进行身份认证?

1)filterType生命周期介绍图

Zuul之身份认证_第1张图片

2) 如何对请求参数授权、验签和解密?

通过继承ZuulFilter指定filterType为pre, RequestContext.getCurrentContext()获取当前请求的上下文,并获取到对应的请求参数,通过请求的appKey和对应的方法判断用户是否有访问该服务的权限、请求次数等。根据参数进行验签和解密,将解密后的参数重写请求上下文HttpServletRequestWrapper,再通过routing发送到对应的springcloud服务中,在服务方中获取到的请求参数是明文,服务方无需关注调用方请求信息的解密操作。因后续需要再次获取到部分调用方基础信息,需将请求的入参存放到request的Attribute里面。前置处理部分代码如下

Zuul之身份认证_第2张图片

 

Zuul之身份认证_第3张图片

3) 如何对返回结果加密和加签?

可以通过继承ZuulFilter指定filterType为post

通过获取request里面的request.getAttribute(“”)获取到调用方的基础信息,根据这些信息把微服务返回的body进行加签和加密,返回至调用方。

部分代码如下:

Zuul之身份认证_第4张图片

 

Zuul之身份认证_第5张图片

你可能感兴趣的:(springcloud,zuul)