javascript
Spring Cloud Zuul –编写过滤器
Netflix OSS項目Zuul充當后端服務的網關,并支持添加安全性,路由等邊緣功能。 在Zuul世界中,稱為Zuul過濾器的組件提供了特定的邊緣功能,為基于Spring Cloud的項目編寫這種過濾器非常簡單。 此處提供了添加過濾器的良好參考。 在這里,我想演示兩個小功能–確定過濾器是否應對請求執行操作,其次要在轉發請求之前添加標頭。
編寫Zuul過濾器
對于Spring Cloud而言 ,編寫Zuul過濾器非常容易,我們需要做的就是添加一個實現ZuulFilter的Spring bean,因此在此示例中,它看起來像這樣:
import com.netflix.zuul.ZuulFilter; import com.netflix.zuul.context.RequestContext; import org.springframework.stereotype.Service;@Service public class PayloadTraceFilter extends ZuulFilter {private static final String HEADER="payload.trace";@Overridepublic String filterType() {return "pre";}@Overridepublic int filterOrder() {return 999;}@Overridepublic boolean shouldFilter() {.... }@Overridepublic Object run() {....} }此實現的一些高級細節,已將其標記為“ pre”的“過濾器類型”,這意味著將在將請求分派到后端服務之前調用此過濾器,filterOrder確定何時在服務器中調用此特定過濾器過濾器鏈,過濾器應確定是否為此請求完全調用此過濾器,并且運行包含過濾器的邏輯。
因此,就我的第一個考慮而言,此過濾器是否應完全作用于流-可以在逐個請求的基礎上完成,我的邏輯很簡單-如果請求uri以/ samplesvc開頭,則此過濾器應對請求起作用。
@Override public boolean shouldFilter() {RequestContext ctx = RequestContext.getCurrentContext();String requestUri = ctx.getRequest().getRequestURI();return requestUri.startsWith("/samplesvc"); }關于修改后端服務的請求標頭的第二個注意事項:
@Override public Object run() {RequestContext ctx = RequestContext.getCurrentContext();ctx.addZuulRequestHeader("payload.trace", "true");return null; }獲得此類請求的支持服務可以查找標頭并采取相應的措施,例如,在這種特定情況下,請查看“ payload.trace”標頭并決定記錄傳入的消息:
@RequestMapping(value = "/message", method = RequestMethod.POST) public Resource<MessageAcknowledgement> pongMessage(@RequestBody Message input, @RequestHeader("payload.trace") boolean tracePayload) {if (tracePayload) {LOGGER.info("Received Payload: {}", input.getPayload());} ....結論
如此處所示,Spring Cloud確實很容易為任何邊緣需求添加Zuul過濾器。 如果您想進一步探索此樣本,我可以在
我的github倉庫 。
翻譯自: https://www.javacodegeeks.com/2016/07/spring-cloud-zuul-writing-filter.html
總結
以上是生活随笔為你收集整理的Spring Cloud Zuul –编写过滤器的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 栅栏的英文是什么意思 栅栏的英文简单介绍
- 下一篇: 并发加对象锁_通用并发对象池