概述

基于springcloud的单点登录服务及基于zuul的网关服务(解决了通过zuul转发到认证服务之后session丢失问题)

详细

一、准备工作

学习前请先系统的学习一下eureka、zuul、spring security,否则上手可能会比较困难,我当时买的《springcloud微服务实战》,这本书写的还不错。

该项目基于springcloud Dalston.SR1。因公司决定使用spring cloud,前期做认证服务时发现通过zuul网关把请求转发到认证服务之后session丢失,一直报csrf验证失败问题,网上的大部分资料也不靠谱,通过研究解决掉该问题,特做了一个例子,供大家参考

二、项目截图

三、各个服务说明

① 服务注册(基于eureka):项目名称:service-registry-server 端口号:8761

启动类:cn.com.springcloudtest.cloud.service.registry.ServiceRegistryServerApplication

② 网关服务(基于zuul): 项目名称:api-gateway-server 端口号:8080

启动类:cn.com.springcloudtest.cloud.api.gateway.ApiGatewayServerApplication

③ 认证服务(基于oauth2及spring security): 项目名称:uaa-server 端口号:7769

启动类:cn.com.springcloudtest.cloud.uaa.UaaServerApplication

认证服务使用redis保存了session,客户端保存于mysql数据库

四、配置文件说明

有些配置作者也没全部搞明白,网上找的设置,但是这么设置确定是没问题的

① service-registry-server服务注册配置信息不再过多描述,标准用法

② api-gateway-server网关服务配置信息

spring:
aop: #aop代理
proxyTargetClass: true
application:
name: api-gateway-server server:
port: 8080
tomcat:
uri-encoding: UTF-8 #服务注册
eureka:
client:
serviceUrl:
defaultZone: http://127.0.0.1:8761/eureka/
# server:
# enable-self-preservation: false #关闭eureka自我保护,生产环境不建议关闭自我保护 #认证中心index页面地址,如果直接登录认证中心则会跳转到该地址
uaa.server.index-path: /uaa/index
#认证中心跳转路径前缀
uaa.server.service.path: /uaa/**
#不走认证的url集合
http.authorize.matchers: /**/css/**,/**/styles/**,/**/js/**,/**/plugin/**,/**/plugins/**,/**/template/**,/**/img/**,/**/fonts/**,/**/cvr100u/**,/css/**,/js/**,/plugin/**,/template/**,/img/**,/fonts/**,/cvr100u/** #网关信息
zuul:
routes:
uaa-server:
sensitiveHeaders: "*" #敏感headers也支持全局设置(必须这样设置)
path: ${uaa.server.service.path}
stripPrefix: false
add-proxy-headers: true #X-Forwarder-Host请求头默认添加到转发请求中 #安全认证信息
security:
basic:
enabled: false
oauth2:
sso:
loginPath: /login
client:
accessTokenUri: http://127.0.0.1:7769/uaa/oauth/token
userAuthorizationUri: /uaa/oauth/authorize
clientId: acme
clientSecret: acmesecret
resource:
jwt:
keyValue: |
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAnGp/Q5lh0P8nPL21oMMrt2RrkT9AW5jgYwLfSUnJVc9G6uR3cXRRDCjHqWU5WYwivcF180A6CWp/ireQFFBNowgc5XaA0kPpzEtgsA5YsNX7iSnUibB004iBTfU9hZ2Rbsc8cWqynT0RyN4TP1RYVSeVKvMQk4GT1r7JCEC+TNu1ELmbNwMQyzKjsfBXyIOCFU/E94ktvsTZUHF4Oq44DBylCDsS1k7/sfZC2G5EU7Oz0mhG8+Uz6MSEQHtoIi6mc8u64Rwi3Z3tscuWG2ShtsUFuNSAFNkY7LkLn+/hxLCu2bNISMaESa8dG22CIMuIeRLVcAmEWEWH5EEforTg+QIDAQAB
-----END PUBLIC KEY-----
id: openid
serviceId: ${PREFIX:}resource

③ uaa-server配置信息

spring:
application:
name: uaa-server
#数据库连接信息
datasource:
url: jdbc:mysql://localhost:3306/uaa?characterEncoding=UTF-8
username: root
password: root
driver-class-name: com.mysql.jdbc.Driver
max-idle: 5
max-wait: 10000
min-idle: 2
initial-size: 3
validation-query: SELECT 1
time-between-eviction-runs-millis: 18800
jdbc-interceptors: ConnectionState;SlowQueryReport(threshold=50)
jpa:
database: MYSQL
show-sql: true
#使用redis存储session,redis服务地址
redis:
host: 127.0.0.1
port: 6379
#不缓存thymeleaf模板,开发环境下配置该属性,生产环境下请勿配置
thymeleaf:
cache: false
cache-period: 0
template:
cache: false server:
port: 7769
context-path: /uaa #认证服务上下文地址(必须配置)
use-forward-headers: false
tomcat:
uri-encoding: UTF-8 #服务注册
eureka:
instance:
preferIpAddress: true
client:
serviceUrl:
defaultZone: http://127.0.0.1:8761/eureka/ security:
basic:
enabled: false
user:
password: password
ignored: /css/**,/js/**,/favicon.ico,/webjars/**
sessions: NEVER #永远不自己创建session #jwt信息(自定义的属性,AuthorizationServerConfigurer配置类中用到)
jwt:
access:
token:
converter:
resource:
location: classpath:keystore.jks
password: foobar
key-pair-alias: test #自定义的属性,WebSecurityConfigurer配置类中用到
http:
authorize:
#不走认证的url集合
matchers: /**/css/**,/**/js/**,/**/plugin/**,/**/template/**,/**/img/**,/**/fonts/**,/**/cvr100u/**,/css/**,/js/**,/plugin/**,/template/**,/img/**,/fonts/**,/cvr100u/**
login:
path: /login

五、java代码配置

①、api-gateway-server服务配置都集中在WebSecurityConfigurer类中,配置比较简单

②、uaa-server服务配置都集中在AuthorizationServerConfigurer和WebSecurityConfigurer中,AuthorizationServerConfigurer是jwt相关的配置,WebSecurityConfigurer是安全相关的配置,重要的部分代码中已经做了注释

六、项目运行效果

注:项目运行前请阅读readme.txt文件

用户名:admin@163.com 密码:admin

注:本文著作权归作者,由demo大师发表,拒绝转载,转载需要作者授权

spring cloud单点登录的更多相关文章

  1. 手把手教你学会 基于JWT的单点登录

      最近我们组要给负责的一个管理系统 A 集成另外一个系统 B,为了让用户使用更加便捷,避免多个系统重复登录,希望能够达到这样的效果--用户只需登录一次就能够在这两个系统中进行操作.很明显这就是单点登 ...

  2. (十一) 整合spring cloud云架构 - SSO单点登录之OAuth2.0登录流程(2)

    上一篇是站在巨人的肩膀上去研究OAuth2.0,也是为了快速帮助大家认识OAuth2.0,闲话少说,我根据框架中OAuth2.0的使用总结,画了一个简单的流程图(根据用户名+密码实现OAuth2.0的 ...

  3. Spring Cloud OAuth2 实现用户认证及单点登录

    文章较长,建议推荐,建议转发,建议收藏,建议关注公众号哈. OAuth 2 有四种授权模式,分别是授权码模式(authorization code).简化模式(implicit).密码模式(resou ...

  4. 基于Spring Cloud 几行配置完成单点登录开发

    单点登录概念 单点登录(Single Sign On),简称为 SSO,是目前比较流行的企业业务整合的解决方案之一.SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统. ...

  5. Spring Cloud云架构 - SSO单点登录之OAuth2.0 根据token获取用户信息(4)

    上一篇我根据框架中OAuth2.0的使用总结,画了SSO单点登录之OAuth2.0 登出流程,今天我们看一下根据用户token获取yoghurt信息的流程: /** * 根据token获取用户信息 * ...

  6. Spring Cloud云架构 - SSO单点登录之OAuth2.0登录流程(2)

    上一篇是站在巨人的肩膀上去研究OAuth2.0,也是为了快速帮助大家认识OAuth2.0,闲话少说,我根据框架中OAuth2.0的使用总结,画了一个简单的流程图(根据用户名+密码实现OAuth2.0的 ...

  7. 整合spring cloud云架构 - SSO单点登录之OAuth2.0登录认证(1)

    之前写了很多关于spring cloud的文章,今天我们对OAuth2.0的整合方式做一下笔记,首先我从网上找了一些关于OAuth2.0的一些基础知识点,帮助大家回顾一下知识点: 一.oauth中的角 ...

  8. Spring Cloud云架构 - SSO单点登录之OAuth2.0 登出流程(3)

    上一篇我根据框架中OAuth2.0的使用总结,画了一个根据用户名+密码实现OAuth2.0的登录认证的流程图,今天我们看一下logout的流程: /** * 用户注销 * @param accessT ...

  9. Spring Cloud云架构 - SSO单点登录之OAuth2.0登录认证(1)

    今天我们对OAuth2.0的整合方式做一下笔记,首先我从网上找了一些关于OAuth2.0的一些基础知识点,帮助大家回顾一下知识点: 一.oauth中的角色 client:调用资源服务器API的应用 O ...

随机推荐

  1. JVM内存模型及垃圾回收算法

    国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html内部邀请码:C8E245J (不写邀请码,没有现金送)国内私 ...

  2. ool _WebTryThreadLock(bool),

    一般的问题是这样的 “bool _WebTryThreadLock(bool), 0xxxxxx: Tried to obtain the web lock from a thread other t ...

  3. Android之Volley使用

    转自:http://blog.csdn.net/lfdfhl/article/details/12223345 稍微做了一点儿修改 /** * 利用NetworkImageView显示网络图片 */ ...

  4. 谷歌死忠速查:可访问谷歌google搜索的IP们

    [见谅! 此文已废了,下面的办法已经无效了!]但是访问我博客并回复的哥们“问天何必”提供了一个方法,详见http://www.gaomn.com/,他提供了一个网站来访问google的,速度还算可以, ...

  5. [Linux] Systemd 入门教程:实战篇

    reference : http://www.ruanyifeng.com/blog/2016/03/systemd-tutorial-part-two.html 上一篇文章,我介绍了 Systemd ...

  6. Rsync服务介绍与配置

    Rsync 简要介绍 rsync 是一个用于增量文件传输的开源工具,不得不说,rsync简直是不同服务器间传输文件.同步文件的利器.与FTP相比,它具有非常简单的安装和配置方法.而且,rsync可以只 ...

  7. strcat实现

    //将源字符串加const,表明其为输入参数 char*strcat(char*strDest,constchar*strSrc) { //后文returnaddress,故不能放在assert断言之 ...

  8. 完全理解Gson(1):简单入门

    GSON是Google开发的Java API,用于转换Java对象和Json对象.本文讨论并提供了使用API的简单代码示例.更多关于GSON的API可以访问:http://sites.google.c ...

  9. Combinations leetcode java

    题目: Given two integers n and k, return all possible combinations of k numbers out of 1 ... n. For ex ...

  10. Inside GDALAllRegister之一: 五大部分

    基本信息 在GDAL的Tutorial中开篇即提到GDALAllRegister函数,它会注册所有已知的驱动,包括动态库自动加载的驱动.最关键是这句话: If for some application ...