我在服务器端进行了以下配置:
server:
port: 8888
spring:
profiles:
active: native
cloud:
config:
server:
native:
search-locations: "classpath:/config"
security:
user:
name: test
password: test
并在客户端进行以下配置:
spring:
cloud:
config:
fail-fast: true
profile: "${spring.profiles.active}"
uri: "${SPRING_CLOUD_CONFIG_URI:http://localhost:8888/}"
username: test
password: test
我可以使用user/pwd
作为test/test
从浏览器成功访问属性,但是当我的客户端尝试获取它时,它失败并显示401错误:
INFO 7620 --- [5cee934b64bfd92] c.c.c.ConfigServicePropertySourceLocator : Fetching config from server at : http://localhost:8888
WARN 7620 --- [5cee934b64bfd92] c.c.c.ConfigServicePropertySourceLocator : Could not locate PropertySource: 401 null
我尝试将spring cloud的日志级别设置为DEBUG,但没有其他日志记录,因此我不知道为什么从客户端获取401,而我可以使用相同的凭据通过浏览器成功访问属性。
我还尝试过从服务器和客户端中删除安全性,并且它运行良好,这意味着其余配置还可以。但是问题是,应用基本安全性时我会忽略什么?为什么它不起作用并抛出401?
答案 0 :(得分:0)
请检查您指定配置文件名称的方式是否正确,以及是否已在Java代码中正确解析。您可以实现CommandLineRunner并从Environment变量打印活动配置文件。
如果您在pom.xml中将属性 spring.profiles.active 指定为本地属性,则可以在application / yaml文件中将其解析为@ spring.profiles.active @
如果您将属性文件指定为VM参数,则它应与当前实现一起使用。
如果未在pom或VM参数中指定spring.profiles.active,它将解析为默认配置文件,而不是本机配置文件。配置客户端和配置服务器中的配置文件应该相同。
答案 1 :(得分:0)
尝试检查这些配置:
两个属性都应该在 bootstrap.properties(而不是 application.properties)中定义
答案 2 :(得分:0)
是的,我们必须使用引导程序属性,因为当 Spring Cloud 应用程序启动时,它会创建一个引导程序上下文。 bootstrap 上下文正在搜索 bootstrap.properties 或 bootstrap.yaml 文件,而应用程序上下文正在搜索 application.properties 或 application.yaml 文件。 bootstrap 上下文是主应用程序的父上下文