如果我们只是使用zuul网关的话,通常情况我们只能提供简单的访问,而一些头信息会被丢失
这些头信息可能有一些安全性校验的的重要信息,比如token
那么我们如何来使头信息可以安全的到达我们具体的微服务模块呢?这就需要网关过滤器了*
具体介绍和功能可以看微服务网关Zuul快速入门体验
这里我们仅讲述ZuulFtlter过滤器保头手段
配置ZuulFilter
import com.netflix.zuul.ZuulFilter;
import com.netflix.zuul.context.RequestContext;
import com.netflix.zuul.exception.ZuulException;
import org.springframework.stereotype.Component;
import javax.servlet.http.HttpServletRequest;
@Component
public class WebFilter extends ZuulFilter {
@Override
public String filterType() {
return "pre";
}
@Override
public int filterOrder() {
return 0;
}
@Override
public boolean shouldFilter() {
return true;
}
@Override
public Object run() throws ZuulException {
//得到request上下文
RequestContext context = RequestContext.getCurrentContext();
//得到request域
HttpServletRequest request = context.getRequest();
//得到头
String header = request.getHeader("Authorization");
System.out.println(header);
//判断是否有头
if (header!=null&&!"".equals(header)){
//把请求头信息进行转发
context.addZuulRequestHeader("Authorization",header);
}
return null;
}
}
这样就结束了
测试,在base服务Controller编码
@Autowired
private HttpServletRequest httpServletRequest;
@RequestMapping(method = RequestMethod.GET)
public Result findAll(){
String header = httpServletRequest.getHeader("Authorization");
System.out.println(header);
return new Result(true, StatusCode.OK,"查询全部成功",labelService.findAll());
}
情况说明
9012是网关端口,base是配置的网关拦截路径
9002是真正端口
当我们配置了过滤器做转发请求头后发现访问http://localhost:9012/base/label
在base服务端可以正确的接收到头信息了