我有一个zuul预过滤器:
@Override
public Object run() {
// read authenticated User from session
RequestContext context = RequestContext.getCurrentContext();
AuthenticatedUser authUser = SessionUtil.getAuthUser();
if (authUser == null) {
// if not logged in
// route to login service
}
// if logged in
// add additional headers to requests
return null;
}
所以在这个过滤器中,我首先看看请求是否经过身份验证。如果没有,我想将其重定向到Eureka的login
服务,然后在用户登录后,他应该被转发到他最初请求的服务。
ZUUL配置就像:
zuul:
ignoredServices: '*'
routes:
service1:
path: /s1/**
serviceId: ${env}.s1
stripPrefix: false
service2:
path: /s2/**
serviceId: ${env}.s2
stripPrefix: false
login:
path: /login/**
sensitiveHeaders:
serviceId: ${env}.login
eureka.client.serviceUrl.defaultZone=http://hostname:8761/eureka/
eureka.instance.non-secure-port-enabled=true
基本上,我想知道如何在过滤器代码中使用Eureka进行路由。
修改
我认为更好的设计可能只是重定向到zuul本身:获取主机并附加/login
。因此yml
中的zuul路由设置将生效。我仍然想知道如何做,然后将请求转发到其原始目的地。