<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          SpringBoot中如何實現(xiàn)Session共享?

          共 3823字,需瀏覽 8分鐘

           ·

          2020-09-26 00:53

          點擊上方藍色字體,選擇“標星公眾號”

          優(yōu)質文章,第一時間送達

          66套java從入門到精通實戰(zhàn)課程分享

          1. 創(chuàng)建web項目

          我們按照之前的經驗,創(chuàng)建一個web程序,并將之改造成Spring Boot項目,具體過程略。

          2.添加依賴包


          ????org.springframework.boot
          ????spring-boot-starter-data-redis
          ?

          ?
          ?????org.springframework.session
          ?????spring-session-data-redis
          ?

          ?
          ?????org.springframework.session
          ?????spring-session-core
          ?


          3.創(chuàng)建application.yml文件

          server:
          ???port:?8080
          ?#配置redis
          ?spring:
          ???redis:
          ?????host:?127.0.0.1
          ?????port:?6379
          ?????#password:?123456
          ?????jedis:
          ???????pool:
          ?????????max-idle:?8
          ?????????min-idle:?0
          ?????????max-active:?8
          ?????????#max-wait:?60000
          ?????#timeout:?3000?#超時一定要大于0
          ???session:
          ?????#設置session存儲類型
          ?????store-type:?redis

          這里可以設置多種session的store-type:

          我們這里選擇利用redis來對session進行集中存儲,實現(xiàn)session共享。

          4.創(chuàng)建Session配置類

          package?com.yyg.boot.config;
          ?
          import?org.springframework.context.annotation.Configuration;
          import?org.springframework.session.data.redis.config.annotation.web.http.EnableRedisHttpSession;
          ?
          /**
          ?*?@Author?一一哥Sun
          ?*?@Date?Created?in?2020/4/28
          ?*?@Description?開啟Redis?Http?Session
          ?*/
          @Configuration
          @EnableRedisHttpSession(maxInactiveIntervalInSeconds?=?3600)
          public?class?RedisHttpSessionConfiguration?{
          ?
          }

          在這里添加@EnableRedisHttpSession注解,可以通過maxInactiveIntervalInSeconds屬性設置Session的過期時間。

          5.創(chuàng)建一個Controller接口方法

          該接口方法當用戶不存在時提示“用戶不存在”,否則會提示“用戶存在”。

          package?com.yyg.boot.web;
          ?
          import?lombok.extern.slf4j.Slf4j;
          import?org.springframework.web.bind.annotation.RequestMapping;
          import?org.springframework.web.bind.annotation.RequestParam;
          import?org.springframework.web.bind.annotation.RestController;
          ?
          import?javax.servlet.http.Cookie;
          import?javax.servlet.http.HttpServletRequest;
          import?javax.servlet.http.HttpSession;
          ?
          /**
          ?*?@Author?一一哥Sun
          ?*?@Date?Created?in?2020/4/28
          ?*?@Description?Description
          ?*/
          @Slf4j
          @RestController
          public?class?SessionController?{
          ?
          ????@RequestMapping("/session")
          ????public?Object?springSession(@RequestParam("username")?String?username,?HttpServletRequest?request,?HttpSession?session)?{
          ????????Cookie[]?cookies?=?request.getCookies();
          ????????if?(cookies?!=?null?&&?cookies.length?>?0)?{
          ????????????for?(Cookie?cookie?:?cookies)?{
          ????????????????log.warn(cookie.getName()?+?"="?+?cookie.getValue());
          ????????????}
          ????????}
          ?
          ????????Object?value?=?session.getAttribute("username");
          ????????if?(value?==?null)?{
          ????????????log.warn("用戶不存在");
          ????????????//保存session
          ????????????session.setAttribute("username",?"{username:?'"?+?username?+?"',?age:?30}");
          ????????}?else?{
          ????????????log.warn("用戶存在");
          ????????}
          ?
          ????????return?"username="?+?value;
          ????}
          ?
          }

          6.創(chuàng)建入口類

          package?com.yyg.boot;
          ?
          import?org.springframework.boot.SpringApplication;
          import?org.springframework.boot.autoconfigure.SpringBootApplication;
          ?
          /**
          ?*?@Author?一一哥Sun
          ?*?@Date?Created?in?2020/4/28
          ?*?@Description?Description
          ?*/
          @SpringBootApplication
          public?class?SpringSessionApplication?{
          ?
          ????public?static?void?main(String[]?args){
          ??????? springapplication.run -?這個網站可出售。?-?最佳的springapplication 來源和相關信息。(SpringSessionApplication.class,args);
          ????}
          ?
          }

          7.完整項目結構

          8.啟動項目進行測試

          第一次在瀏覽器中進行訪問,會看到瀏覽器中的username=null,并且控制臺中展示的log信息為“用戶不存在”,說明此時還沒有創(chuàng)建出session。但是當第一次訪問之后,session就被創(chuàng)建出來了,并且被存儲到了redis中,實現(xiàn)了持久化存儲??梢钥慈缦聢D:

          第二次訪問,就會看到username已經可以獲取到新的信息了。

          log控制臺中也看到已經提示“用戶存在”的信息了。

          并且我們可以看到Redis控制臺中,提示了TTL過期時間是3660,每隔1秒鐘刷新1次,3600秒后過期。

          此時我們可以分別啟動一個8080和8081進程,在兩個進程上分別測試session接口。

          #進入到項目的target目錄下,執(zhí)行java?-jar命令,部署我們的jar包
          ?
          F:\onlineWorks\boot-demos\demo43_springsession\target>java?-jar?demo43_springsession-1.0-SNAPSHOT.jar?--server.port=8080
          ?
          F:\onlineWorks\boot-demos\demo43_springsession\target>java?-jar?demo43_springsession-1.0-SNAPSHOT.jar?--server.port=8081

          在瀏覽器中,我們的8080和8081端口上訪問時,可以看到有一個共同的Session信息:

          可以看到在兩個不同的進程端口上,都分別訪問到了同一個session信息,說明我們實現(xiàn)了分布式進程中session共享??梢娫谟辛薙pring Session后,實現(xiàn)session共享還是很簡單得到。


          原文鏈接:https://www.zhihu.com/people/poul-20/posts


          粉絲福利:Java從入門到入土學習路線圖

          ???

          ?長按上方微信二維碼?2 秒


          感謝點贊支持下哈?

          瀏覽 33
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  开心成人激情 | 特黄AAAAAAA片免费视频 | 日本中文字幕精品 | 免费看国产黄色 | 亚洲精品久久久久久 |