日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

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

瀏覽:201日期:2023-04-27 10:40:22

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

前置說(shuō)明

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

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

添加依賴(lài)

需要為springboot項(xiàng)目添加以下兩個(gè)依賴(lài),參與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的依賴(lài),一個(gè)是spring-session-data-redis的依賴(lài)。

配置redis參數(shù)

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

# Redis數(shù)據(jù)庫(kù)索引(默認(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)是6379spring.redis.port=6379# 連接池最大連接數(shù)(使用負(fù)值表示沒(méi)有限制)spring.redis.lettuce.pool.max-active=8# 連接池最大阻塞等待時(shí)間(使用負(fù)值表示沒(méi)有限制)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=5000spring.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過(guò)期時(shí)間

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

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 {}

簡(jiǎn)單的登錄邏輯

@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', '用戶(hù)名和密碼不能為空'); return 'login'; } // 查找該用戶(hù),成功后根據(jù)該用戶(hù)的類(lèi)別返回到對(duì)應(yīng)頁(yè)面 User user = userService.getUserByUsernameAndPassword(username, password); if(user == null) { model.addAttribute('errorMsg', '用戶(hù)名或密碼錯(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'; } } }

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

登錄過(guò)濾器

@Componentpublic 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 { }}

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

注意

如果只是存字符串等redis可以直接解析的對(duì)象,那就不會(huì)有什么問(wèn)題,但是如果是存取對(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)必須相同,否則無(wú)法正確進(jìn)行反序列化。

小結(jié)

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

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

標(biāo)簽: Spring
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
精品久久97| 最新国产精品视频| 国产精品亚洲综合在线观看| 国产精品www.| 极品av在线| 国产成人精选| 久久中文字幕二区| 丝袜美腿亚洲色图| 日韩中出av| 国产精品白浆| 久久网站免费观看| 日本一不卡视频| 国产精品蜜芽在线观看| 不卡一区2区| 日韩二区三区四区| 97se综合| 亚洲毛片视频| 成人台湾亚洲精品一区二区| 欧美午夜精品一区二区三区电影| 日本综合精品一区| 91亚洲国产| 免费成人av在线播放| 国产亚洲观看| 欧美亚洲国产精品久久| 日本不卡不码高清免费观看 | 国产美女久久| 婷婷国产精品| 国产伦精品一区二区三区视频 | 日韩欧美美女在线观看| 日韩在线综合| 日韩精品亚洲一区二区三区免费| а√在线中文在线新版| 蜜臀a∨国产成人精品| 超碰超碰人人人人精品| 中文字幕av一区二区三区人| 国产成人免费| 日韩一区二区三免费高清在线观看| 岛国av在线播放| 视频精品一区二区| 国产 日韩 欧美一区| 国产精品羞羞答答在线观看| 99国产精品视频免费观看一公开| 你懂的国产精品| 蜜臀久久99精品久久久画质超高清 | 91精品美女| 国产一区亚洲| 精品亚洲成人| 日韩三级精品| 欧美日韩免费观看一区=区三区| 精品不卡一区| 日韩激情啪啪| 国产美女精品| 91精品韩国| 麻豆视频久久| 日本不卡在线视频| 免费日韩精品中文字幕视频在线| 久久久久免费| 91综合久久爱com| 欧美日韩日本国产亚洲在线 | 亚洲视频播放| 欧美日韩在线播放视频| 风间由美中文字幕在线看视频国产欧美| 日韩和欧美一区二区三区| 婷婷六月综合| 美女网站视频一区| 国产一区二区三区四区五区传媒 | 美女精品一区二区| 国产精品mv在线观看| 日韩精品国产欧美| 免费成人性网站| 伊人精品在线| 激情欧美丁香| 92国产精品| 四虎成人av| 日韩精品一二区| 激情婷婷综合| 亚洲一级网站| 久久国产中文字幕| 久久亚洲国产| 成人免费网站www网站高清| 91视频一区| 中文在线免费视频| а√天堂8资源中文在线| 精品一区二区三区中文字幕在线| 国产精品美女久久久久久不卡| 欧美中文高清| 日韩高清二区| 欧美一级久久| 久久不见久久见中文字幕免费| 欧美日本不卡| 国产欧美在线| 老司机免费视频一区二区| 老司机免费视频一区二区| 精品一区电影| 涩涩av在线| 久久国产主播| 2023国产精品久久久精品双| 久久中文字幕av一区二区不卡| 久久五月天小说| 亚洲少妇自拍| 日韩精品福利一区二区三区| 日韩高清一区| 国产精品成人国产| 国语精品一区| 999久久久免费精品国产| 91九色精品国产一区二区| 免费人成网站在线观看欧美高清| 亚洲欧美专区| 国产精品一卡| 91视频精品| 激情偷拍久久| 久久亚洲电影| 国产日韩高清一区二区三区在线 | 欧美日韩免费观看视频| 国产字幕视频一区二区| 亚洲精品中文字幕乱码| 美女国产一区| 日本精品久久| 久久久久久亚洲精品美女| 日韩一区自拍| 鲁大师影院一区二区三区| 奇米狠狠一区二区三区| 国产91在线播放精品| 香蕉精品视频在线观看| 亚洲天堂日韩在线| 国产精品任我爽爆在线播放| 中文字幕在线视频久| 黄色日韩在线| 国产欧美日韩精品高清二区综合区 | 国产精品3区| 97精品国产| 宅男噜噜噜66国产日韩在线观看| 中文视频一区| 久久这里只有精品一区二区| 日韩精品专区| 久久亚洲二区| 久久久久黄色| 欧美日韩精品一区二区视频| 亚洲精品日本| av免费不卡国产观看| 免费视频一区二区| 久久免费精品| 免播放器亚洲| 国产在线不卡一区二区三区| 红桃视频国产精品| 国产精品久久久久77777丨| 久久人人精品| 欧美日一区二区三区在线观看国产免 | 久久精品国产www456c0m| 日韩成人av影视| 久久久精品久久久久久96 | 精品一区欧美| 国产麻豆一区二区三区精品视频| 91精品啪在线观看国产18| 日本成人中文字幕在线视频| 韩国三级一区| 国产乱码精品一区二区三区亚洲人| 色综合www| 日韩福利在线观看| 在线成人动漫av| 国产精品欧美在线观看| 激情五月色综合国产精品| 国产精品久久久久久久免费软件 | 日韩在线看片| 国产精品最新| 免费人成在线不卡| 久久天堂av| 国产日产一区| 丝瓜av网站精品一区二区| 中文在线а√天堂| 国产日本亚洲| 免费日韩av片| 亚洲91视频| 久久xxx视频| 亚洲最新av| 99精品视频在线| 麻豆精品99| 亚洲免费专区| 亚洲一级特黄| 国产中文在线播放| 久久不见久久见免费视频7| 中文字幕免费精品| 亚洲欧洲午夜| 久久免费高清| 新版的欧美在线视频| 久久av电影| 久久国内精品自在自线400部| 在线视频日韩| 久久中文亚洲字幕| 亚洲黄色免费看| 久久精品网址| 国产精品nxnn| 日韩成人精品一区二区三区| 麻豆久久精品| 天堂成人免费av电影一区| 欧美亚洲精品在线| 日本精品不卡| 国产a亚洲精品| 精品美女在线视频| 国产精品亚洲四区在线观看|