最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

多個(gè)SpringBoot項(xiàng)目采用redis實(shí)現(xiàn)Session共享功能

 更新時(shí)間:2020年09月08日 11:19:24   作者:肥宅不快樂  
這篇文章主要介紹了多個(gè)SpringBoot項(xiàng)目采用redis實(shí)現(xiàn)Session共享,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

有時(shí)我們可能有多個(gè)不同的Web應(yīng)用,可以相互調(diào)用,這時(shí)如果每個(gè)應(yīng)用都有自己的session,那用戶跳轉(zhuǎn)到另一個(gè)應(yīng)用時(shí)就又需要登陸一次,這樣會(huì)帶來很不好的體驗(yàn),因此我們需要在不同的應(yīng)用中共享session。這里,我們采用redis來實(shí)現(xiàn)。

前置說明

由于只用到redis和springboot的整合,所以只能實(shí)現(xiàn)一個(gè)URL下的不同端口的應(yīng)用之間的session共享,如果連應(yīng)用名稱都完全不同的兩個(gè)應(yīng)用要實(shí)現(xiàn)session共享,在這個(gè)基礎(chǔ)上還需要使用到Nginx,這種方式我暫時(shí)還沒有試過。(SpringBoot項(xiàng)目默認(rèn)就是不帶應(yīng)用名稱的,除非自己在配置文件中修改過)

需要提前在本地安裝好redis,或者連接遠(yuǎn)程redis服務(wù)器。這里就不寫安裝教程了,可以自行去網(wǎng)上搜索。

添加依賴

需要為springboot項(xiàng)目添加以下兩個(gè)依賴,參與session共享的項(xiàng)目都需要添加。

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

<dependency>
	<groupId>org.springframework.session</groupId>
	<artifactId>spring-session-data-redis</artifactId>
</dependency>

一個(gè)是redis的依賴,一個(gè)是spring-session-data-redis的依賴。

配置redis參數(shù)

在SpringBoot項(xiàng)目的application.properties配置文件中配置redis參數(shù):

# Redis數(shù)據(jù)庫索引(默認(rèn)為0)
spring.redis.database=0
# Redis服務(wù)器地址,如果是遠(yuǎn)程redis服務(wù)器,就改成服務(wù)器地址
spring.redis.host=127.0.0.1
# Redis服務(wù)器連接端口,默認(rèn)是6379
spring.redis.port=6379
# 連接池最大連接數(shù)(使用負(fù)值表示沒有限制)
spring.redis.lettuce.pool.max-active=8
# 連接池最大阻塞等待時(shí)間(使用負(fù)值表示沒有限制)
spring.redis.lettuce.pool.max-wait=-1ms
# 連接池中的最大空閑連接
spring.redis.lettuce.pool.max-idle=5
# 連接池中的最小空閑連接
spring.redis.lettuce.pool.min-idle=0
# 連接超時(shí)時(shí)間(毫秒)
spring.redis.timeout=5000
spring.session.store-type=redis

如果你的項(xiàng)目使用的是application.yml,就進(jìn)行如下配置:

spring:
 redis:
  database: 0
  host: 127.0.0.1
  port: 6379
  lettuce:
   pool:
    max-idle: 8
    min-idle: 0
    max-active: 8
    max-wait: -1ms
  timeout: 5000
 session:
  store-type: redis

配置session過期時(shí)間

創(chuàng)建一個(gè)用于配置session過期時(shí)間的配置類:

import org.springframework.context.annotation.Configuration;
import org.springframework.session.data.redis.config.annotation.web.http.EnableRedisHttpSession;

@Configuration
@EnableRedisHttpSession(maxInactiveIntervalInSeconds = 86400*30)
public class SessionConfig {
}

簡單的登錄邏輯

 @RequestMapping("/doLogin")
 public String doLogin(HttpServletRequest request, Model model){
   String username = request.getParameter("username");
   String password = request.getParameter("password");
   if(StringUtils.isEmpty(username) || StringUtils.isEmpty(password)){
     model.addAttribute("errorMsg", "用戶名和密碼不能為空");
     return "login";
   }
   // 查找該用戶,成功后根據(jù)該用戶的類別返回到對(duì)應(yīng)頁面
   User user = userService.getUserByUsernameAndPassword(username, password);
   if(user == null) {
     model.addAttribute("errorMsg", "用戶名或密碼錯(cuò)誤");
     return "login";
   } else {
     request.getSession().setAttribute("currentUser", user);
     model.addAttribute("currentUser", user);
     String identity = user.getIdentity();
     if("admin".equals(identity)){
       return "admin";
     }else{
       return "user";
     }
   }
 }

直接按照原來的方式將對(duì)象存入session:request.getSession().setAttribute("currentUser", user); 此時(shí)session會(huì)存入redis。

登錄過濾器

@Component
public class LoginInterceptor implements HandlerInterceptor {
  @Override
  public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
      throws Exception {
    HttpSession session = request.getSession();
    User currentUser = (User) session.getAttribute("currentUser");
    if(currentUser == null){
      response.sendRedirect(request.getContextPath() + "/toLogin");
      return false;
    }else{
      return true;
    }
  }
  @Override
  public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse,
              Object o, ModelAndView modelAndView) throws Exception {

  }

  @Override
  public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse,
                Object o, Exception e) throws Exception {

  }
}

同樣按原來的方式從session中取出對(duì)象:User currentUser = (User) session.getAttribute("currentUser"); 此時(shí)會(huì)從redis中取出該對(duì)象。

注意

如果只是存字符串等redis可以直接解析的對(duì)象,那就不會(huì)有什么問題,但是如果是存取對(duì)象就需要進(jìn)行序列化了,比如上文中存的是我自定義的一個(gè)User對(duì)象,那么在存的時(shí)候,是會(huì)對(duì)該對(duì)象進(jìn)行序列化的,取出時(shí)也會(huì)進(jìn)行反序列化,因此該對(duì)象要實(shí)現(xiàn)Serializable接口,并且需要進(jìn)行session共享的項(xiàng)目中都要有一個(gè)一模一樣的對(duì)象,比如我的User定義如下:

import java.io.Serializable;

public class User implements Serializable {

  private String id;
  private String username;
  private String password;
  private String email;
  private String identity;
  private static final long serialVersionUID = -5809782578272943999L;
  
  // 省略getter、setter方法
}

注意這個(gè)序列號(hào)serialVersionUID,不同應(yīng)用中的User對(duì)象的這個(gè)序列號(hào)必須相同,否則無法正確進(jìn)行反序列化。

小結(jié)

之所以要實(shí)現(xiàn)這個(gè)功能是因?yàn)樵谖掖罱ㄗ约旱木W(wǎng)站時(shí)想集成之前做過的另一個(gè)應(yīng)用,把它作為一個(gè)功能嵌入這個(gè)應(yīng)用中,通過http互通。中間遇到了很多坑,這種方式的主要缺點(diǎn)就是不能支持不同應(yīng)用名稱的應(yīng)用之間的session共享,下一次可以嘗試一下加入Nginx。

到此這篇關(guān)于多個(gè)SpringBoot項(xiàng)目采用redis實(shí)現(xiàn)Session共享功能的文章就介紹到這了,更多相關(guān)SpringBoot Session共享內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java接口冪等性設(shè)計(jì)原理解析

    Java接口冪等性設(shè)計(jì)原理解析

    這篇文章主要介紹了Java接口冪等性設(shè)計(jì)原理解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-05-05
  • java數(shù)據(jù)結(jié)構(gòu)關(guān)于棧的實(shí)例應(yīng)用

    java數(shù)據(jù)結(jié)構(gòu)關(guān)于棧的實(shí)例應(yīng)用

    大家好,本篇文章主要講的是java數(shù)據(jù)結(jié)構(gòu)關(guān)于棧的實(shí)例應(yīng)用,感興趣的同學(xué)趕快來看一看吧,對(duì)你有幫助的話記得收藏一下,方便下次瀏覽
    2021-12-12
  • java實(shí)現(xiàn)MD5加密算法的實(shí)例代碼

    java實(shí)現(xiàn)MD5加密算法的實(shí)例代碼

    這篇文章主要介紹了java實(shí)現(xiàn)MD5加密算法的實(shí)例代碼,有需要的朋友可以參考一下
    2013-12-12
  • 史上最全maven中的pom詳述

    史上最全maven中的pom詳述

    pom是maven的基本工作單元,它是一個(gè)XML文件,其中包含有關(guān)項(xiàng)目的信息以及Maven用于構(gòu)建項(xiàng)目的配置詳細(xì)信息,本文給大家介紹maven中的pom詳述,感興趣的朋友一起看看吧
    2025-10-10
  • Spring實(shí)戰(zhàn)之依賴關(guān)系注入之后的行為示例

    Spring實(shí)戰(zhàn)之依賴關(guān)系注入之后的行為示例

    這篇文章主要介紹了Spring實(shí)戰(zhàn)之依賴關(guān)系注入之后的行為,結(jié)合實(shí)例形式分析了Spring依賴關(guān)系注入之后的行為實(shí)現(xiàn)與使用相關(guān)操作技巧,需要的朋友可以參考下
    2019-11-11
  • 深入理解Spring事務(wù)原理

    深入理解Spring事務(wù)原理

    這篇文章主要帶領(lǐng)大家深入理解Spring事務(wù)原理,Spring事務(wù)的傳播屬性
    2016-07-07
  • Java如何處理圖片保存之后變紅色的問題

    Java如何處理圖片保存之后變紅色的問題

    這篇文章主要介紹了Java如何處理圖片保存之后變紅色的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • SpringBoot攔截器原理解析及使用方法

    SpringBoot攔截器原理解析及使用方法

    這篇文章主要介紹了SpringBoot攔截器原理解析及使用方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-04-04
  • java局域網(wǎng)聊天小程序

    java局域網(wǎng)聊天小程序

    這篇文章主要為大家詳細(xì)介紹了java局域網(wǎng)聊天小程序,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-01-01
  • Java對(duì)象流實(shí)例代碼

    Java對(duì)象流實(shí)例代碼

    這篇文章主要介紹了Java對(duì)象流實(shí)例代碼,具有一定借鑒價(jià)值,需要的朋友可以參考下
    2018-01-01

最新評(píng)論

利津县| 尼勒克县| 卓资县| 苍南县| 石棉县| 大理市| 合川市| 呼玛县| 昌平区| 曲松县| 西和县| 和平县| 勃利县| 稻城县| 巴彦淖尔市| 西峡县| 平山县| 民县| 文水县| 得荣县| 平昌县| 黄冈市| 沙田区| 永年县| 乃东县| 合山市| 温泉县| 高清| 陇南市| 高唐县| 滕州市| 苏州市| 青龙| 建德市| 漾濞| 噶尔县| 获嘉县| 咸宁市| 祁连县| 江门市| 洛宁县|