SpringSecurity、Spring Social、SpringSession、TX-LCN、Spring Cloud Data Flow、JWT 架構(八)

繼續SpringSession。今天看怎麼用。

用SpringSession得藉助第三方的力量Nginx和Redis。Nginx負責反向代理用戶請求並對請求進行轉發到不同的機器上,Redis負責存儲session。這裏我只是做個測試而已,所以用windows版本的Nginx和Redis。真實的應該在Linux中或者docker中。

windows版的Nginx構建:

第一步:去官網下載windows版本:官網地址:http://nginx.org/en/download.html 我這裏使用的是1.10.3的版本。

下載完成對應的壓縮包爲: nginx-1.10.3.zip,進行解壓操作!【注:解壓的目錄一定不要含有中文,否則訪問出錯!】

第二步:配置nginx,這裏配置nginx全部使用默認的即可。

注意不要直接雙擊nginx.exe,這樣會導致修改配置後重啓、停止nginx無效,需要手動關閉任務管理器內的所有nginx進程。

在nginx.exe目錄,打開命令行工具,用命令 啓動

1.進入解壓的目標,我的 E:\nginx-1.10.3 
2.執行啓動命令 ,有一個一閃而過的效果!

start nginx.exe

啓動以後輸入http://localhost:80去瀏覽器看看,如下圖則啓動成功:

第三步:

第三步:配置nginx中的反向代理:

1.備份nginx.conf一份,然後修改nginx.conf文件 
2.修改使用反向代理upstream,進行負責均衡負載

  保存配置後保存,接下來我們看一下簡單的一些nginx命令:

windows版的Redis搭建:

https://github.com/MSOpenTech/redis這個鏈接可以下載,但是現在速度很慢很慢。大家可以搜索https://www.jb51.net/softs/541181.html去腳本之家下載.

下載好以後就去解壓,然後進入win+r後可以進入安裝目錄,啓動redis-seriver.exe直接啓動。啓動好了以後如下圖所示:

接下來我們啓動客戶端:測試一下

測試了一下沒啥問題,好了redis沒有問題了。但是這只是一個單機版的。 

接下來我們繼續springsession。

用IAEA開始開發:

第一步:創建一個空白的項目。

1:

2:

3:

第二步:配置在application.xml換成application.yml後配置一下配置:

server:
  port: 8090

spring:
  application:
    name: manager
  profiles:
    active: dev
  redis:
    host: 127.0.0.1
    port: 6379

第三步:引入對應的依賴

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.6.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.alibaba</groupId>
    <artifactId>session-demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>session-demo</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <!-- redis -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-redis</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>
        <!-- Spring session -->
        <dependency>
            <groupId>org.springframework.session</groupId>
            <artifactId>spring-session-data-redis</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

第四步:編寫測試的Controller

package com.alibaba.comtroller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.HashMap;
import java.util.Map;

@Controller
@RequestMapping("/UserController")
public class UserController {

    @RequestMapping("/setUser")
    public @ResponseBody Map<String,Object> setUser(HttpServletRequest request, HttpServletResponse response) {
        request.getSession().setAttribute("url", request.getRequestURL());
        Map<String,Object> map = new HashMap<>();
        map.put("url", request.getRequestURL());
        return map;
    }

    @RequestMapping("/getUser")
    public @ResponseBody Map<String,Object> getUser(HttpServletRequest request){
        Map<String,Object> map = new HashMap<>();
        map.put("sessionId", request.getSession().getId());
        map.put("url", request.getSession().getAttribute("url"));
        map.put("serverName", 8090);
        return map;
    }
}

第五步:啓動的主類上添加註解

package com.alibaba;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.session.data.redis.config.annotation.web.http.EnableRedisHttpSession;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@SpringBootApplication
@EnableRedisHttpSession
public class SessionDemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(SessionDemoApplication.class, args);
    }

}

第六步:複製當前的項目一份出來,但是要把對應的端口號改爲8080,因爲我nginx中監聽的就是8080和8090這兩個端口。將UserController 中的getUser中添加的端口號改爲8080其他的一律不變。

第七步:先啓動redis redis-server.exe

第八步:啓動nginx

這裏說一下nginx需要配置一下:

第九步:啓動兩個項目:

第十步:在瀏覽器中訪問:

先訪問:http://localhost/UserController/setUser

接着改爲:http://localhost/UserController/getUser可以看到獲取到的session和對應的服務。

然後我們不斷的刷新當前頁面:

 我們看提下redis中的數據:

以上就是基於SpringSession的分佈式回話管理的簡單案例。這裏用到的第三方回話管理的工具是redis。如果要用到其他的mongdb的話在啓動類上面加上相應的註解就是。下一次我們聊聊用這個sessionId我們能幹嘛。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章