分布式多系统SSO单点登录

1.整体系统布局

  大的布局有两种方式,这两种方式都需要一个独立的SSO认证服务系统称为SSO服务端,而第一种是在SSO服务端只完成登录接口,返回是否登录成功的标识和数据,每个SSO客户端都需要独立的登录页面和登录接口(这个登录接口去调用SSO服务端的登录接口返回数据),而第二种则是整个登录系统(接口,页面)全部在SSO服务端,其实这两种方式都差不多。

    第一种:

 第二种:

 2.实现方式

     1.cookie+jwt,登录之后返回cookie,cookie中存的就是jwt,然后每次请求直接传jwt,并在过滤器中进行验证

     2.token请求头,登录之后返回token,浏览器可使用cookie或localStorage存储,每次请求的时候将token带上,然后在后端过滤器进行验证

     3.cookie+session,登录之后返回sessionId,然后在系统A中保存sessionId和用户的关系,每次请求带上SessionId

3.可使用的框架

     1.shiro   2.cas   3.shiro+cas   4.spring security+oauth2

4.注意点:cookie是没有全局传输的使用方式的,只可以为其设置domain域,即可使用的域名(一般设置为一级域名,这样该系统下的所有子域都可共享了,如果有多个一级域名,则需要想办法将cookie复制过去),如果不太了解cookie域的可以参考博客:https://blog.csdn.net/zhouziyu2011/article/details/61200943/

遇到的问题或bug:

1.首先我用的是SpringBoot2.x搭建的项目,一般来说项目的domain域会设置成 .xx.com,注意xx前面有一个点,但是SpringBoot内置的tomcat解析不了,因为tomcat版本过高,使用的解析方式发生了变化。然后我就百度,一开始看到有说修改SpringBoot内置的tomcat版本,我照着方法修改后就出现问题了,主要是pom文件报错:

CoreException: Could not get the value for parameter compilerId for plugin execution default-compile: PluginResolutionException: Plugin org.apache.maven.plugins:maven-compiler-plugin:3.1 or one of its dependencies could not be resolved: The following artifacts could not be resolved: com.google.code.findbugs:jsr305:jar:2.0.1, org.codehaus.plexus:plexus-compiler-api:jar:2.2: Failure to transfer com.google.code.findbugs:jsr305:jar:2.0.1 from http://repo.maven.apache.org/maven2 was cached in the local repository, resolution will not be reattempted until the update interval of central has elapsed or updates are forced. Original error: Could not transfer artifact com.google.code.findbugs:jsr305:jar:2.0.1 from/to central (http://repo.maven.apache.org/maven2): The operation was cancelled。。。。。。

这个错误就是说jar包冲突了,然后我就又按照错误百度,或者按照经验删除错误的jar包,让maven重新去下载jar包,最后发现越搞越没用,依旧报错,然后一气之下删除了所有org文件夹下的jar包,因为我基本用的开源框架,所以jar包基本使用的都是org文件夹下的,结果就好了,项目终于有能启动了,恢复正常了,(所以在这里提醒大家碰到pom文件出问题了,你最好直接把一个大的文件夹删掉,否则没删对包,就只会浪费更多的时间)但是由于删除了大部分jar包,之前修改的tomcat版本其实也已经恢复成默认的了,然后又继续百度怎么解析domain。

2.然后大部分都说用下面这个方法:

然后我放在项目中根本就找不到那些类,因为我是用的SpringBoot2.x版本比较高,然后我就去SpringBoot官网去看,终于找到了

只要加上这段话就行了,作用就是改变tomcat的解析方式。

3.设置cookie的时候最好把path也设置一下,设置成"/",否则可能cookie没有效果。

4.因为是多系统,在后端需要使用RestTempalate或者HttpClient访问url获取数据时需要注意,这两个类在请求的时候是不会自动带上cookie的,所以需要手动添加上去,可参考:https://blog.csdn.net/zty1317313805/article/details/80096584

  

猜你喜欢

转载自blog.csdn.net/weixin_38312502/article/details/81180260