Spring Boot 404错误返回首页

e3bfsja2  于 2022-11-23  发布在  Spring
关注(0)|答案(4)|浏览(175)

我在spring cloud gateway中遇到了一个非常奇怪的问题。每个备用请求都返回一个404。我在api-gateway中配置的所有服务都无一例外地发生了这个问题。我甚至不知道从哪里开始调试这个问题。
这是我的应用程序.yml文件,用于公共配置。

server:
  port: 8080
  ssl:
    enabled: true
    key-store: classpath:keystore.p12
    key-store-password: password
    key-store-type: pkcs12
    key-alias: tomcat

security:
  require-ssl=true:
logging:
  level:
    org:
      springframework:
        cloud.gateway: DEBUG
        http.server.reactive: DEBUG
        web.reactive: DEBUG

spring:
  application:
    name: api-gateway
  cloud:
    gateway:
      httpclient:
        ssl:
          useInsecureTrustManager: true

这是我的java配置文件

@EnableWebFluxSecurity
public class SecurityConfig {

    @Bean
    public SecurityWebFilterChain springSecurityFilterChain(ServerHttpSecurity http,
                                                            ReactiveClientRegistrationRepository clientRegistrationRepository) {
        // Authenticate through configured OpenID Provider
        http.oauth2Login();
        // Also logout at the OpenID Connect provider
        http.logout(logout -> logout.logoutSuccessHandler(new OidcClientInitiatedServerLogoutSuccessHandler(
                clientRegistrationRepository)));
        // Require authentication for all requests
        http.authorizeExchange().anyExchange().authenticated();
        // Allow showing /home within a frame
        http.headers().frameOptions().mode(Mode.SAMEORIGIN);
        // Disable CSRF in the gateway to prevent conflicts with proxied service CSRF
        http.csrf().disable();
        return http.build();
    }
}

下面是spring概要文件特定的配置文件,它被加载到公共应用程序.yml文件之上。

spring:
  security:
    oauth2:
      client:
        provider:
          keycloak:
            issuerUri: http://localhost:9080/auth/realms/mylocal
            userNameAttribute: preferred_username
        registration:
          keycloak:
            clientId: api-gateway-client
            clientSecret: abcdefgh-ijkl-mnop-qrst-uvwxyz5d6a9
  cloud:
    gateway:
      default-filters:
        - TokenRelay
      routes:
        - id: news
          uri: http://localhost:8082/news
          predicates:
            - Path= /news/**
        - id: customers
          uri: http://localhost:8083/customers
          predicates:
            - Path= /boards/**
        - id: search
          uri: http://localhost:8085/search
          predicates:
            - Path= /search/**
xzlaal3s

xzlaal3s1#

嘿,我最近也遇到了这个问题,我发现是负载平衡的问题。确保spring.application.name你试图联系的微服务的www.example.com都是大写字母(示例),特别是如果你使用Eureka 。(希望它有帮助)

n53p2ov0

n53p2ov02#

我知道这是个老问题......但也许对未来的读者有帮助。
嘿,这里是我自己找到的最简单的解决方案,在浏览器url中,不要使用'localhost',而是使用您的系统名称。
例如:http://hp:8083/服务名称/客户/**
还要确保以大写形式命名所有Spring应用程序。

9nvpjoqh

9nvpjoqh3#

我也遇到过类似的问题。原因是在我的Eureka 服务器上以同一个应用程序名注册了几个服务。就像这样:Eureka instances screenshot
这两个服务是完全不同的服务,但它们都注册在一个应用程序名下。因此,当通过负载平衡器发出请求时,后者会尝试使用两个服务的url。一个服务能够正确地为请求提供服务,但另一个服务可能对请求的路径一无所知,这就是为什么返回404。

3zwjbxry

3zwjbxry4#

检查是否有两个或多个微服务使用相同的spring.application.name并向Eureka 注册。

相关问题