是否有人在Spring Cloud Gateway/Spring WebFlux中实现X509互验验证的简单示例?
我正在尝试在Spring Cloud Gateway中实现相互认证(使用X509客户端证书的身份验证),但是在我的整个研究中,我无法弄清楚从哪里开始. 从我所看到的,身份验证不是通过Spring Cloud Gateway本身来处理的,而应通过Spring WebFlux完成 - 如果这是一个错误的假设,请纠正我.我发现了通过Spring Security实施认证身份验证的示例,但我没有找到WebFlux的任何示例. 任何人都可以提供一些提示甚至一些代码示例,以使我在正确的轨道上使用吗? 解决方案 您可以在src/main/resources/application.yml中进行配置,例如 server: # for testing or development without SSL certs (HTTP) use an "appropriate" # non-secure port, e.g. 8080 # for HTTPS use an "
如何将弹簧云网关路由到Websocket服务?
我想在Spring Cloud Gateway上路由我的Websocket-Service 作为Spring Cloud Gateway Docs,我尝试执行此操作: spring: cloud: gateway: routes: - id: websocket-sockjs-route uri: http://localhost:8085 predicates: - Path=/websocket/info/** - id: websocket_route uri: ws://localhost:8085 predicates: - Path=/websocket/** 但是当我尝试过时,它不会有效: spring: cloud: gateway: routes: - id: webso
2 2023-12-02
编程技术问答社区
如何在Jboss或Tomcat上部署Spring Cloud Gateway 2.1?
我想部署弹簧云网关,但它是在弹簧框架5(项目反应堆)上构建的. 我可以创建一个战争文件并将其部署在传统的应用程序服务器(例如JBOSS或TOMCAT)上. Spring Webflux在Tomcat,Jetty,Servlet 3.1+容器上支持 注意: 这是春季云网关项目链接 https://spring.io/projects/projects/spring-cloud-cloud-gateway > 解决方案 我认为这是不可能的,因为Spring Cloud Gateway本身就是一个Spring Boot WebFlux应用程序,并且此用例仅由嵌入式服务器支持,.
4 2023-11-27
编程技术问答社区
无法从Spring Cloud Gateway访问微服务的API-Docs.无法加载API定义
我正在尝试将我的微服务链接到网关. ,但我无法通过网关访问微服务的API. Swagger-UI的错误: Failed to load API definition Fetch error Not Found http://localhost:8080/microservice/v2/api-docs Swagger版本: io.springfox springfox-boot-starter 3.0.0 i可以直接通过微服务(端口8081): http://localhost:8081/v2/api-docs ,但我无法通过网关(端口8080)进行操作: http://localhost:8080/microservice/v2/api-doc
2 2023-10-06
编程技术问答社区
如何将多个用户角色添加到Spring WebFlux安全性(反应性Spring Security)配置中的单个PathMatcher/Route中?
我有一条需要为多个用户进行身份验证的路线.在 Spring Cloud Gateway上执行集成测试服务,以测试是否按预期工作的所有路线安全性.如何将超过1个用户角色添加到单个PathMatcher/Route? 使用Spring Boot 2.1.6,Spring Cloud Finchely.Sr2,Spring Cloud Gateway,Spring WebFlux安全性(反应性弹簧安全) @EnableWebFluxSecurity public class SecurityConfig { @Bean public SecurityWebFilterChain springSecurityFilterChain(ServerHttpSecurity http) { http.csrf().disable() .formLogin().disable() .logout().disable()
2 2023-09-15
编程技术问答社区
Spring WebFlux和Spring Cloud Gateway:如何在单声道中提取对象并添加到请求标题
我目前正在使用自定义JWT身份验证进行弹簧云网关.身份验证后,我想使用GlobalFilter将标题中的JWT令牌字符串传递到下游服务: public class AddJwtHeaderGlobalFilter implements GlobalFilter, Ordered { @Override public Mono filter(ServerWebExchange exchange, GatewayFilterChain chain) { Mono principal = exchange.getPrincipal(); String jwtString = extract(principal); ServerHttpRequest request = exchange.getRequest() .mutate()
4 2023-09-15
编程技术问答社区
GlobalFilter vs WebFilter
我正在踏上春季云网关的第一步. 在研究期间,我想更好地了解GlobalFilter的使用.在具体的情况下,我打算每次都应用一些过滤器每个路线. 阅读文档(参考)是实现我目标的两种方法. 第一个是使用GlobalFilter,第二个是在default-filters中具有GatewayFilter. 两个解决方案都很好,但是仅适用于YAML配置中定义的路线. 如果我有任何路由器或路由函数,我每次都需要声明过滤器 .filters(f -> f.globalFilter("something")) 我找到目标的唯一方法是直接使用WebFilter(参考) 所以我的问题是有人可以解释两个过滤器之间的区别GatewayFilter/GlobalFilter和Webfilter 也许答案是在春季文档中,但我找不到. 预先感谢您! 解决方案 如果要为每个路线有一个过滤器(对于YAML中定义的路线以及网关本身中托管的控制器/端点),WebFilter应该
4 2023-09-15
编程技术问答社区
Kubernetes Ingress应该和Spring Cloud Gateway一起生活吗?
请小架构和设计问题. 问题: Kubernetes是否应该与Spring Cloud Gateway一起生活?如果不是,应该首选哪一个? 首先,使用Spring WebFlux/Spring Cloud Gateway项目,我设法进行了基于工作路线的转发.意思是,我所有的客户只需要知道这个且唯一的弹簧云网关端点,如果URL包含servicea,则弹簧云网关将转到Servicea,如果ServiceB,如果Seriveb等,等等,直接. . 我添加了一些更多的"软件级别"功能,例如动态配置(要在运行时更改路线),断路器,费率限制,舱壁和其他几个功能,非常酷,但实际上,我最终使用了路线转发为主要功能. 然后几周前,我花了一些时间研究Kubernetes,更精确地是Kubernetes的入口. 我设法学习了Kubernetes Ingress是一件非常酷而强壮的事情.我至少设法执行了基于路线的转发. 意思是,客户只需要知道这一点,并且只需要入口端点,并且入口将转发到K
8 2023-09-15
编程技术问答社区
Spring Cloud Gateway和TokenRelay过滤器
我试图将Jhipster从使用Zuul迁移到Spring Cloud Gateway. Jhipster使用Eureka查找路线,我相信我已经正确配置了Spring Cloud Gateway,以查找路线并传播到它们的访问令牌.这是我的配置: spring: cloud: gateway: default-filters: - TokenRelay discovery: locator: enabled: true lower-case-service-id: true route-id-prefix: /services/ httpclient: pool: max-connections: 1000 我遇到的问题是访问令牌不是向下游服务发送Authorization标题. 这是我的applica
如何在Spring WebFlux Server实例/挂钩上访问所有会话中的生命周期?
我正在尝试实现为此,我需要将用户会话"静态"检索到: 删除匹配issuer和subject的授权客户端,但没有用户会话的上下文 如果已删除的授权客户端是该用户的最后一个(带有授权代码),则会使会话无效.但是,只有不再有授权的客户端:如果您仅通过同一客户端登录Google和Facebook,则仅从两者中的一个注销时,该客户端的会话应保持活动状态. 当前ServerWebExchange是由OIDC提供商本身启动的,并且由于不涉及用户浏览器,没有会话cookie. 相反,提供了一个"注销" JWT作为请求正文(这是我找到issuer和subject的地方,该> subject应该足以确定会话无效,并且授权的客户端可以删除). 使用servlet,可以通过实现HttpSessionListener, HttpSessionIdListener(并使用ServletListenerRegistrationBean)来解决此问题,以通过issuer> issuer和用户s
6 2023-09-15
编程技术问答社区
由于无效的CSRF令牌
我正在尝试通过弹簧云网关提供角度应用的可能性. 一切正常用于获取请求,但是一旦我尝试通过网关将邮政请求发送给资源服务,请求就会失败,因为"无效的CSRF代币". 这可能是因为某些不良配置,但我找不到它. 另外,对于这种特定情况,Spring Gateway和Angular的在线文档都不是很有用的. 如果要复制此行为,则是具有当前配置的存储库: github repo . 当前行为:由于"无效的CSRF代币",Angular失败的请求是: error: "Invalid CSRF Token" message: "Http failure response for http://gateway:8000/api/post: 403 Forbidden" name: "HttpErrorResponse" ​ok: false ​status: 403 ​statusText: "Forbidden" ​url: "http://gateway:8000/api
12 2023-09-15
编程技术问答社区
使用Spring Cloud Gateway和KeyCloak获得访问令牌
我正在使用Spring Cloud Gateway和Spring Security和KeyCloak进行访问管理.我遇到一个问题,因为我得到的令牌没有所有参数,例如我从KeyCloak中的令牌端点获得的所有参数. . 当我击中所有详细信息时,我击中KeyCloak令牌端点时: http://localhost:8080/auth/auth/realms/myrealm/stoloption/openID-connect/token { "exp": 1595310135, "iat": 1595309835, "jti": "0a78d67c-878c-468c-8d03-e003af0350c3", "iss": "http://localhost:8080/auth/realms/myrealm", "aud": "account", "sub": "5c3c71c8-4682-4cd8-8e28-ee66a7edea4e", "typ
春季云网关 +春季安全资源服务器
我真的不会把它放在这里,但我真的很困惑, 我想实现以下内容. 我正在运行 Java 14 Spring Cloud Gateway版本:Hoxton.SR3 Spring Boot版本:2.2.5.RELEASE 现在,我想将安全性集成到我的网关和所有下游微服务.最终,我决定将Firebase作为身份提供商(IDP)选择.我的Angular应用程序将从Firebase获取JWT令牌,并将其发送到Cloud Gateway中.因此,网关将开始仅充当资源服务器,就是它. 在这里我试图尝试一下. 设置和Spring Cloud Gateway同时表现为资源服务器. 这里很好地解释了春季安全文档. 这是我的配置的样子 @EnableWebFluxSecurity public class ResourceServerSecurityConfiguration { @Bean public SecurityWebFilterChain securi
24 2023-09-14
编程技术问答社区
Spring Security OAuth2/OIDC RP发起的注销不工作
我正在尝试使用Spring Security,从Spring Cloud Gateway到KeyCloak实现RP发射的注销.我的春季安全配置几乎与弹簧安全参考文档,以下复制, @EnableWebFluxSecurity public class SCGSecurityConfig { @Autowired private ReactiveClientRegistrationRepository clientRegistrationRepository; private ServerLogoutSuccessHandler keycloakLogoutSuccessHandler() { OidcClientInitiatedServerLogoutSuccessHandler oidcLogoutSuccessHandler = new OidcClientInitiatedServerLog
184 2023-09-14
编程技术问答社区
引起:java.lang.illegalargumentException:模式不能为空或空
我正在使用Spring Boot v2.5.2. erorr org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'springSecurityFilterChain' defined in class path resource [org/springframework/security/config/annotation/web/configuration/WebSecurityConfiguration.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [javax.servlet.Filter]: Fact
Spring Cloud Gateway POST Forbidden
我在云网关路线后面有一个带有接力管滤波器的资源服务: routes: - id: apis uri: http://rest-app:8080/apis predicates: - Path=/apis/** filters: - TokenRelay= 获得请求正常,但是在帖子上,我被禁止使用403 CSRF Token has been associated to this client 我尝试禁用CSRF保护添加Bean @Bean fun springWebFilterChain(http: ServerHttpSecurity): SecurityWebFilterChain { return http.csrf().disable().cors().disable().build() } 但这没有效果,我仍然得到4
10 2023-09-14
编程技术问答社区
Spring Cloud Gateway与Zuul有什么不同?
我一直在使用 Zuul 作为边缘服务和API网关.最近,我注意到Spring Cloud Platform发行 Spring Cloud Cloud Gateway .两个网关有什么区别?为什么Zuul不扩展以支持S-C-Gateway的功能?一个新图书馆的驱动因素是什么?什么时候应该使用? 解决方案 我是Spring Cloud Gateway的作者. Zuul使用阻止API建立在Servlet 2.5(与3.x一起使用).它不支持任何长期存在的连接,例如WebSocket. Gateway使用非阻止API建立在Spring Framework 5,Project Reactor和Spring Boot 2上.支持WebSocket,并且由于它与Spring紧密整合,因此它是一种更好的开发人员体验. 其他解决方案 ----春季5 --- 的注释 春季云网关是由于以下原因和优势而替换Zuul的 Spring Cloud Gateway是Spring C
Spring云网关自动路由到Eureka服务
我与Spring合作创建微服务.我正在使用Eureka进行服务发现和Zuul进行路由.现在,我想切换到Spring Cloud Gateway(由于非阻滞性质),但我未能弄清楚一种自动路由到每个Eureka服务的方法. 例如,如果一个服务" eureka-client"注册到尤里卡(Eureka),则Zuul确实提供了像Localhost:8762/eureka-client这样的路径本身.使用Spring Cloud Gateway,我可以独自为每种服务创建一条路线. routes: - id: eureka-client uri: lb://eureka-client predicates: - Path=/eureka-client/** 有一些可以接受的服务,但最终我可能会得到数百个服务.每个人都必须在Spring Cloud Gateway中编写自己的路线. 是否有一种方法可以从尤里卡
12 2023-09-13
编程技术问答社区
CSRF令牌与此客户有关联
我正在使用spring-boot-starter-security-2.4.2.我会遇到 的问题 CSRF令牌已与此客户端关联 在Postman中使用时. 在这里,我正在使用Spring Cloud Gateway,并为此添加了Spring Security. POST: localhost:8080/auth/login body: { "username": "user", "password": "pass" } 我也尝试了卷发: curl -d "username=user1&password=abcd" -X POST http://localhost:8080/auth/login 下面是我的春季安全配置: @Override protected void configure(HttpSecurity http) throws Exception { http=http .cors()
4 2023-09-13
编程技术问答社区
我如何从spring cloud gateway获得CORS允许起源的值?
给定yaml片段 spring: cloud: gateway: globalcors: cors-configurations: '[/**]': allowedOrigins: "*" 我如何使用@Value("${spring.cloud.gateway.globalcors.cors-configurations.???.allowedOrigins") 解决方案 尝试此 spring.cloud.gateway.globalcors.cors-configurations.'[/**]'.allowed-origins=* spring.cloud.gateway.globalcors.cors-configurations.'[/**]'.allowed-methods=HEAD,OPTIONS,GET,POST,PUT,PATCH spring.cloud.gatew
4 2023-09-13
编程技术问答社区