文档章节

SpringCloud consul 微服务(注册到主机名的问题)- SpringSecurityOAuth2 authorization_code 模式遇到的坑

无小农
 无小农
发布于 07/08 22:31
字数 553
阅读 53
收藏 1

目前项目在使用consul做服务注册与发现,做SpringSecurityOAuth2 权限认证的authorization_code模式的时候发现一个异常坑爹的问题

这是开始的服务注册代码块 bootstrap.yml:

spring:
  cloud:
    consul:
      port: 8500
      host: localhost
      discovery:
        serviceName: auth
        locator:
          lower-case-service-id: true
          enabled: true
        register: true

这是注册完后的健康检查

他会把你的主机地址给注册上来。 平时使用可能没问题,但是 当做OAuth2的 authorization_code 模式认证的时候,会出现跨域异常情况如下:

这是请求路径:

http://localhost:8001/auth/oauth/authorize?response_type=code&client_id=client_name&redirect_uri=http://localhost:8001/auth/callback&scope=auth

访问后跳转到默认的登录界面:

仔细看,url位置访问地址变成了之前注册的主机名 从而导致的结果就是,点击登录界面出现下图:

没有权限 返回401。 问题就出在了,跳转回主机名导致了跨域问题。

解决该问题的措施就是修改开始的bootstrap.yml的文件:

spring:
  cloud:
    consul:
      port: 8500
      host: localhost
      discovery:
        serviceName: auth
        locator:
          lower-case-service-id: true
          enabled: true
        register: true
        prefer-ip-address: true #这个必须配
        tags: version=1.0
        instance-id: ${spring.application.name}:${spring.cloud.client.ip-address}
        healthCheckInterval: 15s
        health-check-url: http://${spring.cloud.client.ip-address}:${server.port}/actuator/health

consul注册增加强制限制 prefer-ip-address:true 强制获取ip的方式注册到consul。

2019.07.09

由于没有配置

spring.cloud.consul.discovery.prefer-ip-address=true

微服务将会注册所在主机/容器的主机名 注册到consul,然而,我们会发现有时可能造成注册IP到consul  主机名是通过调用Java API获取的,有时候Java API无法获得主机名,于是会将IP地址发送给 consul + 只要你配置了环境变量HOST_NAME ,就可以将你所配置的环境变量注册

spring.cloud.gateway.discovery.instance.hostname=${HOST_NAME}

获取主机名的相关代码:

https://github.com/spring-cloud/spring-cloud-commons/blob/master/spring-cloud-commons/src/main/java/org/springframework/cloud/commons/util/InetUtils.java

相关Issue

https://github.com/spring-cloud/spring-cloud-netflix/issues/2084

从ip跳转回主机名导致跨域权限异常。

© 著作权归作者所有

无小农
粉丝 5
博文 24
码字总数 13287
作品 0
杭州
后端工程师
私信 提问
SpringCloud使用Prometheus监控(基于Eureka)

本文介绍SpringCloud使用Prometheus,基于Eureka服务发现。 1.Prometheus介绍 在之前写过两篇有关Prometheus使用的文章,如下: 《SpringBoot使用prometheus监控》 《SpringBoot使用SOFA-Lo...

dalaoyang
03/11
0
0
史上最简单的 SpringCloud 教程 | 终章

版权声明:本文为博主原创文章,欢迎转载,转载请注明作者、原文超链接 ,博主地址:http://blog.csdn.net/forezp。 https://blog.csdn.net/forezp/article/details/70148833 转载请标明出处...

方志朋
2017/04/12
0
0
SpringCloud--鸿鹄Cloud分布式微服务云系统

简介 鸿鹄云Cloud是基于SpringCloud来封装的,是一系列框架的有序集合。利用Spring Boot的开发模式简化了分布式系统基础设施的开发,如服务发现、注册、配置中心、消息总线、负载均衡、断路器...

itcloud
2018/07/25
1K
0
Spring Cloud-honghu Cloud分布式微服务云系统

简介 鸿鹄云Cloud是基于SpringCloud来封装的,是一系列框架的有序集合。利用Spring Boot的开发模式简化了分布式系统基础设施的开发,如服务发现、注册、配置中心、消息总线、负载均衡、断路器...

itcloud
2018/04/25
568
0
微服务Springcloud超详细教程+实战(四)

如在文档中遇到什么问题请联系作者 QQ:1172796094 本人正在找深圳Java实习工作,求大佬带飞 —————————————————————————————————————— 初始SpringClo...

Java小表弟
2018/12/11
0
0

没有更多内容

加载失败,请刷新页面

加载更多

TiDB 最佳实践系列(三)乐观锁事务

作者:Shirly TiDB 最佳实践系列是面向广大 TiDB 用户的系列教程,旨在深入浅出介绍 TiDB 的架构与原理,帮助用户在生产环境中最大限度发挥 TiDB 的优势。我们将分享一系列典型场景下的最佳实...

TiDB
13分钟前
2
0
原来缓存是这样

经过一闪而过的一个灵感,记下来,我觉得缓存的定义应该是这样定义的: 我之前一直认为缓存的词义是错误的:是在读取到值之后,再次被使用的时候,不会去取新的值,而是使用旧的值,这是是错...

走向人生巅峰的大路
15分钟前
3
0
数字货币交易所开发常用的7个开源撮合引擎

如果你希望按照自己的需求打造金融交易平台,那么应当选择合适的交易撮合引擎进行二次开发而不是基于完整的交易平台实现进行修改。本文将介绍10个采用不同语言开发的开源的撮合引擎,你可以根...

汇智网教程
18分钟前
3
0
Spring Security做JWT认证和授权

Spring Security做JWT认证和授权

乐逍遥-镜子
19分钟前
3
0
LNMP---日志不记录静态文件、日志切割、静态文件过期缓存、nginx防盗链

4.39 日志不记录静态文件 4.40 日志切割 4.41 静态文件过期缓存 4.42 nginx防盗链 扩展: yum install lrzsz -yrz 上传文件sz filename 这样去把这个文件推送到windows上 一、日志不记录...

tobej
30分钟前
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部