记一次系统架构的改造(如何在多个微服务项目中使用一套微信权限验证服务)

原创 2018年04月16日 19:02:40

最近对公司的某在线项目进行了架构重组特记录一下,以后如有类似情况仍可进行参考。

首先,公司现有springboot项目A,提供若干rest数据服务、前端页面展示、微信的jssdk权限验证服务、以及与前端页面通信的websocket服务。项目A提供了这么多服务也是有点汗颜,按理说应该继续拆分成更多的微服务,这就是一个产品没有好好设计想一点加一点导致的恶果。

其次,公司最近想做另一个h5页面项目B,来提供一些微信中的线上服务。既然与项目A没什么关系,自然是拿springboot再写一个微服务比较好。

项目部署如下图


项目B既然要在微信中使用免不了会用到微信JSSDK中的一些内容,想到此处大家会想到,项目A中已经有了微信的权限验证服务,是不是可以利用一下,不必再写一套了?这个思路是完全正确的,现在的问题是如何顺利让项目B利用项目A中的微信权限验证服务。

微信的权限验证有这样一个特点:配置安全域名时可配置一个1级域名,在使用的时候无论是1级域名下的网站还是2级域名下的网站都能正确验证,但要求是安全域名是不能带端口,只能使用默认的80端口。现在项目A使用的是80端口微信验证自然好使,但项目B使用了同一服务器上的3002端口这又该如何利用项目A的微信验证服务呢?

写到这里有经验的同学自然想到可以用nginx做反向代理,但这个反向代理该怎么做?写配置文件反向代理两个端口的服务都到aaa.com的80端口么?这是不可能的,nginx上对于不同端口的服务反向代理只能要么访问端口不一样,要么访问域名不一样。

这时我们想到了微信安全域名的特点,就是上面提到的 配置安全域名时可配置一个1级域名,在使用的时候无论是1级域名下的网站还是2级域名下的网站都能正确验证。这下有了方案,我们可以让项目A占用3001端口提供服务、项目B占用3002端口提供服务,将80端口让给nginx,在nginx中配置一个1级域名给项目A,配置一个2级域名给项目B,他们都使用80端口,这就完美的解决了两个项目只使用一个微信验证服务的难题。


nginx的server配置文件如下:

server {
    listen       80;
    server_name  aaa.com
    location / {
        proxy_pass http://aaa.com:3001;
        proxy_read_timeout 180s;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection $connection_upgrade;
        break;
    }
}
server {
    listen       80;
    server_name  second.aaa.com;
    location / {
        proxy_pass http://aaa.com:3002;
        proxy_read_timeout 180s;
        break;
    }
}

其中

proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;

这两句是对websocket的一个反向代理,如项目中无websocket服务可不理会。


当然项目A还有可以改进的地方,就是把微信验证的服务完全剥离出来,单独写一个微服务来提供微信验证服务。这个也是接下来的架构改造工作了。


深入聊聊微服务架构的身份认证问题

从单体应用架构到分布式应用架构再到微服务架构,应用的安全访问在不断的经受考验。为了适应架构的变化、需求的变化,身份认证与鉴权方案也在不断的变革。面对数十个甚至上百个微服务之间的调用,如何保证高效安全的...
  • u011676417
  • u011676417
  • 2017-06-20 10:55:59
  • 10549

记一次系统架构的改造(如何在多个微服务项目中使用一套微信权限验证服务)

最近对公司的某在线项目进行了架构重组特记录一下,以后如有类似情况仍可进行参考。首先,公司现有springboot项目A,提供若干rest数据服务、前端页面展示、微信的jssdk权限验证服务、以及与前端...
  • jinciyulang
  • jinciyulang
  • 2018-04-16 19:02:40
  • 60

Android <em>多个</em>service的action 相同冲突 <em>验证</em>demo

Android <em>多个</em>service的action 相同冲突 <em>验证</em>demo,对应博客地址是http://blog.csdn.net/czlove110/article/details/50791390
  • 2018年04月18日 00:00

如何在spring项目中使用shiro进行权限管理

也不知道是什么原因,越来越有写篇博客的想法,或许是经常在网上看看它有某某某的好处,不过写个博客确实可以整理下自己学到的知识,方便以后查找。废话不多,下面我讲讲我是怎样在项目中加入shiro,然后再项目...
  • liyunyu2
  • liyunyu2
  • 2015-09-10 11:41:21
  • 423

微服务架构 - Spring Boot中使用Swagger2构建强大的RESTful API文档

由于Spring Boot能够快速开发、便捷部署等特性,相信有很大一部分Spring Boot的用户会用来构建RESTful API。而我们构建RESTful API的目的通常都是由于多终端的原因,这...
  • u011537073
  • u011537073
  • 2017-05-24 10:08:19
  • 814

Web Service Case Study: 统一身份认证服务

本文是Web Service Case Study系列文章的第四篇。在这篇文章中,我将围绕一个多应用环境下统一认证服务组件的架构展开讨论,探讨如何利用Web服务所带来的好处,实现跨平台跨应用的统一身份...
  • ccsdba
  • ccsdba
  • 2006-09-15 16:32:00
  • 3344

服务器端校验(更重要)和客户端校验

struts2提供了两种校验方式:服务器端校验(更重要)和客户端校验 也分为:validate()校验方法、自定方法的义校验方法、校验框架校验方法三种,其中校验框架校验方法又分为两种:校验器优先...
  • chuck_kui
  • chuck_kui
  • 2016-05-11 10:30:19
  • 1718

微服务化改造系列之四:授权中心

这篇文章是微服务化改造系列的第四篇,主题是授权中心。有了服务注册中心和配置中心,下一步应该就可以发起服务调用了吧?Wait, 还有一个关键问题要解决。不同于单体应用内部的方法调用,服务调用存在一个服务...
  • eMac
  • eMac
  • 2016-12-04 16:57:07
  • 3128

SpringMVC配置多数据源实战

  • 2016年01月09日 18:00
  • 106KB
  • 下载

对于httpclient在android5.0及以下的系统中,访问多证书的服务器时出现hostname验证不过

现象:对于现在服务器部署的域名可多个后,在使用https协议时,会部署多个ssl证书链,而在android5.0及以下的系统使用httpclient访问这类某个域名时,有时候会出现hostname校验...
  • happy668ha
  • happy668ha
  • 2018-02-01 15:18:37
  • 106
收藏助手
不良信息举报
您举报文章:记一次系统架构的改造(如何在多个微服务项目中使用一套微信权限验证服务)
举报原因:
原因补充:

(最多只允许输入30个字)