小编Dam*_*ato的帖子

Spring Cloud Netflix:通过RequestInterceptor将主机请求参数传递给FeignClient

我正在使用 Eureka、Zuul 和 FeignClient 构建一个 Spring Cloud 项目(Brixton.M4 和 Spring Boot 1.3.1),我正在尝试添加多租户支持(租户由子域:tenant1.myservice.com 标识)。为此,我想以某种方式将原始子域与通过 Feign 从一个服务转发到另一个服务的请求一起传递,但我似乎无法找到正确的方法来做到这一点。

我有一个客户端,它公开一个@RestController,它调用一个@FeignClient 与我的后端通信,后端通过自己的@RestController 向客户端公开服务器操作。

@FeignClient 使用与服务器上的 @RestController 相同的接口:

@FeignClient(name = "product")
public interface ProductService extends IProductService {

}
Run Code Online (Sandbox Code Playgroud)

我目前想做的是在 RequestInterceptor 中设置一个标头:

@Component
public class MultiTenancyRequestInterceptor implements RequestInterceptor {

    private CurrentTenantProvider currentTenantProvider;

    @Autowired
    public MultiTenancyRequestInterceptor(CurrentTenantProvider currentTenantProvider) {
        this.currentTenantProvider = currentTenantProvider;
    }

    @Override
    public void apply(RequestTemplate template) {
        try {
            template.header("TENANT", currentTenantProvider.getTenant());
        } catch (Exception e) {
            // "oops"
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我的提供者类是一个简单的组件,我试图在其中注入请求/会话范围 bean:

@Component
public class CurrentTenantProvider …
Run Code Online (Sandbox Code Playgroud)

spring-mvc spring-boot spring-cloud netflix-feign netflix-zuul

5
推荐指数
1
解决办法
3133
查看次数

zuul重定向问题背后的Spring MVC Web应用程序

我有一套Spring Boot(1.3.3),在Zuul后面运行Spring Cloud(Brixton.RC2)微服务,我的网址被重定向重写了.

我的主要问题是我的网络应用程序落后于zuul,并且在重定向期间似乎不知道主机,即使我应该设置所有必要的属性.

当我访问http://test.example.com/时,我希望被重定向到http://test.example.com/login,但我被重定向到http:// machinehostname/login ...如果我直接去到http://test.example.com/login我可以看到我的登录表单和登录但是然后被重定向到http:// machinehostname /但如果我手动转到http://test.example.com/我可以使用例如,在表单中的POST之后,我的应用程序再次正确地执行重定向.

以下是我的网络应用的一些属性:

server.use-forward-headers = true
server.tomcat.protocol-header = X-Forwarded-Proto
server.tomcat.remote-ip-header = X-Forwarded-For
Run Code Online (Sandbox Code Playgroud)

这是我的zuul属性:

#Server
server.port = 80
server.use-forward-headers = true 

#Zuul
zuul.add-proxy-headers = true
zuul.ignored-services = "*"

zuul.routes.api.service-id = api
zuul.routes.api.path = /api/**
zuul.routes.api.strip-prefix = true

zuul.routes.web.service-id = web
zuul.routes.web.path = /**
Run Code Online (Sandbox Code Playgroud)

我在网络应用中的安全设置:

@Override
protected void configure(HttpSecurity httpSecurity) throws Exception {
    //@formatter:off
    httpSecurity
        .formLogin()
            .successHandler(new SavedRequestAwareAuthenticationSuccessHandler())
            .loginPage("/login")    
                .permitAll()
            .failureUrl("/login-error")
            .defaultSuccessUrl("/")
            .and()
        .logout() …
Run Code Online (Sandbox Code Playgroud)

spring-security spring-boot netflix-zuul spring-cloud-netflix

5
推荐指数
0
解决办法
2055
查看次数