概述 概述 基於springcloud的單點登錄服務及基於zuul的網關服務(解決了通過zuul轉發到認證服務之後session丟失問題) 基於springcloud的單點登錄服務及基於zuul的網關服務(解決了通過zuul轉發到認證服務之後session丟失問題) 詳細 詳細 代碼下載:http: ...
概述
基於springcloud的單點登錄服務及基於zuul的網關服務(解決了通過zuul轉發到認證服務之後session丟失問題)詳細
代碼下載:http://www.demodashi.com/demo/10313.html
一、準備工作
學習前請先系統的學習一下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文件
用戶名:[email protected] 密碼:admin
代碼下載:http://www.demodashi.com/demo/10313.html
註:本文著作權歸作者,由demo大師發表,拒絕轉載,轉載需要作者授權