我有一个使用oAuth2保护的微服务,称为country-service。当我直接向此服务发送请求(包括我的JWT承载令牌)时,一切正常:
server:
port: 8081
spring:
database:
driverClassName: org.postgresql.Driver
datasource:
url: jdbc:postgresql://localhost:5432/vue-boot-country
username: postgres
password: postgres
jpa:
hibernate:
ddl-auto: validate
database-platform: org.hibernate.dialect.PostgreSQLDialect
eureka:
client:
serviceUrl:
defaultZone: http://localhost:8761/eureka/
我也有一个api-gateway(Zuul代理):
@SpringBootApplication
@EnableEurekaClient
@EnableZuulProxy
public class VueBootApiGatewayApplication {
public static void main(String[] args) {
SpringApplication.run(VueBootApiGatewayApplication.class, args);
}
}
除了这两个文件之外没有其他文件
server:
port: 8765
eureka:
client:
serviceUrl:
defaultZone: http://localhost:8761/eureka/
zuul:
routes:
vue-boot-country-service: /api/country/**
add-proxy-headers: true
我无法向代理发送成功的请求,我一直收到#34;未经授权的"错误:
注意:当我从资源服务器中删除oAuth2安全性时,Zuul代理似乎可以正常工作。
有人知道我在这里做错了吗?
答案 0 :(得分:4)
这与zuuls所谓的“敏感”标题有关,比如“授权”。对于传递给内部的所有请求,这些都被过滤了......
我不知道,如果只使用此配置设置标头:
zuul:
ignoredHeaders:
- authorization
如果没有,您可以定义一个Zuul过滤器bean来手动管理它:
@Component
public class RelayTokenFilter extends ZuulFilter{
@Override
public String filterType() {
return "pre";
}
@Override
public int filterOrder() {
return 10000;
}
@Override
public boolean shouldFilter() {
return true;
}
@Override
public Object run() {
RequestContext context = RequestContext.getCurrentContext();
@SuppressWarnings("unchecked") Set<String> ignoredHeaders = (Set<String>) context.get("ignoredHeaders");
ignoredHeaders.remove("authorization");
return null;
}
}
答案 1 :(得分:1)
我有同样的问题。令牌不会通过Zuul传递给微服务。所以我加了
<?xml version="1.0" encoding="UTF-8"?>
<ContentView xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="TcuClientStandard.Helpers.Views.View1">
<ContentView.Content>
<ScrollView Orientation="Horizontal">
<StackLayout x:Name="stackLayout" Orientation="Horizontal">
</StackLayout>
</ScrollView>
</ContentView.Content>
</ContentView>
希望它可能对某人有用