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

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

SpringBoot+SpringSession+Redis實現(xiàn)session共享及唯一登錄示例

瀏覽:194日期:2023-03-14 09:31:42

最近在學(xué)習(xí)springboot,session這個點一直困擾了我好久,今天把這些天踩的坑分享出來吧,希望能幫助更多的人。

一、pom.xml配置

<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>二、application.properties的redis配置

#redisspring.redis.host=127.0.0.1spring.redis.port=6379spring.redis.password=123456spring.redis.pool.max-idle=8spring.redis.pool.min-idle=0spring.redis.pool.max-active=8spring.redis.pool.max-wait=-1#超時一定要大于0spring.redis.timeout=3000spring.session.store-type=redis

在配置redis時需要確保redis安裝正確,并且配置notify-keyspace-events Egx,spring.redis.timeout設(shè)置為大于0,我當(dāng)時這里配置為0時springboot時啟不起來。

三、編寫登錄狀態(tài)攔截器RedisSessionInterceptor

//攔截登錄失效的請求public class RedisSessionInterceptor implements HandlerInterceptor{ @Autowired private StringRedisTemplate redisTemplate; @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {//無論訪問的地址是不是正確的,都進行登錄驗證,登錄成功后的訪問再進行分發(fā),404的訪問自然會進入到錯誤控制器中HttpSession session = request.getSession();if (session.getAttribute('loginUserId') != null){ try {//驗證當(dāng)前請求的session是否是已登錄的sessionString loginSessionId = redisTemplate.opsForValue().get('loginUser:' + (long) session.getAttribute('loginUserId'));if (loginSessionId != null && loginSessionId.equals(session.getId())){ return true;} } catch (Exception e) {e.printStackTrace(); }} response401(response);return false; } private void response401(HttpServletResponse response) {response.setCharacterEncoding('UTF-8');response.setContentType('application/json; charset=utf-8'); try{ response.getWriter().print(JSON.toJSONString(new ReturnData(StatusCode.NEED_LOGIN, '', '用戶未登錄!')));}catch (IOException e){ e.printStackTrace();} } @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { } @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { }}四、配置攔截器

@Configurationpublic class WebSecurityConfig extends WebMvcConfigurerAdapter{ @Bean public RedisSessionInterceptor getSessionInterceptor() {return new RedisSessionInterceptor(); } @Override public void addInterceptors(InterceptorRegistry registry) {//所有已api開頭的訪問都要進入RedisSessionInterceptor攔截器進行登錄驗證,并排除login接口(全路徑)。必須寫成鏈?zhǔn)剑謩e設(shè)置的話會創(chuàng)建多個攔截器。//必須寫成getSessionInterceptor(),否則SessionInterceptor中的@Autowired會無效registry.addInterceptor(getSessionInterceptor()).addPathPatterns('/api/**').excludePathPatterns('/api/user/login');super.addInterceptors(registry); }}五、登錄控制器

@RestController@RequestMapping(value = '/api/user')public class LoginController{ @Autowired private UserService userService; @Autowired private StringRedisTemplate redisTemplate; @RequestMapping('/login') public ReturnData login(HttpServletRequest request, String account, String password) {User user = userService.findUserByAccountAndPassword(account, password);if (user != null){ HttpSession session = request.getSession(); session.setAttribute('loginUserId', user.getUserId()); redisTemplate.opsForValue().set('loginUser:' + user.getUserId(), session.getId()); return new ReturnData(StatusCode.REQUEST_SUCCESS, user, '登錄成功!');}else{ throw new MyException(StatusCode.ACCOUNT_OR_PASSWORD_ERROR, '賬戶名或密碼錯誤!');} } @RequestMapping(value = '/getUserInfo') public ReturnData get(long userId) {User user = userService.findUserByUserId(userId);if (user != null){ return new ReturnData(StatusCode.REQUEST_SUCCESS, user, '查詢成功!');}else{ throw new MyException(StatusCode.USER_NOT_EXIST, '用戶不存在!');} }}六、效果

我在瀏覽器上登錄,然后獲取用戶信息,再在postman上登錄相同的賬號,瀏覽器再獲取用戶信息,就會提示401錯誤了,瀏覽器需要重新登錄才能獲取得到用戶信息,同樣,postman上登錄的賬號就失效了。

瀏覽器:

SpringBoot+SpringSession+Redis實現(xiàn)session共享及唯一登錄示例

SpringBoot+SpringSession+Redis實現(xiàn)session共享及唯一登錄示例

postman:

SpringBoot+SpringSession+Redis實現(xiàn)session共享及唯一登錄示例

七、核心原理詳解

分布式session需要解決兩個難點:1、正確配置redis讓springboot把session托管到redis服務(wù)器。2、唯一登錄。

1、redis:

redis需要能正確啟動到出現(xiàn)如下效果才證明redis正常配置并啟動

SpringBoot+SpringSession+Redis實現(xiàn)session共享及唯一登錄示例

同時還要保證配置正確

@EnableCaching@EnableRedisHttpSession(maxInactiveIntervalInSeconds = 30)//session過期時間(秒)@Configurationpublic class RedisSessionConfig{ @Bean public static ConfigureRedisAction configureRedisAction() {//讓springSession不再執(zhí)行config命令return ConfigureRedisAction.NO_OP; }}

springboot啟動后能在redis上查到緩存的session才能說明整個redis+springboot配置成功!

SpringBoot+SpringSession+Redis實現(xiàn)session共享及唯一登錄示例

2、唯一登錄:

1、用戶登錄時,在redis中記錄該userId對應(yīng)的sessionId,并將userId保存到session中。

HttpSession session = request.getSession();session.setAttribute('loginUserId', user.getUserId());redisTemplate.opsForValue().set('loginUser:' + user.getUserId(), session.getId());

2、訪問接口時,會在RedisSessionInterceptor攔截器中的preHandle()中捕獲,然后根據(jù)該請求發(fā)起者的session中保存的userId去redis查當(dāng)前已登錄的sessionId,若查到的sessionId與訪問者的sessionId相等,那么說明請求合法,放行。否則拋出401異常給全局異常捕獲器去返回給客戶端401狀態(tài)。

唯一登錄經(jīng)過我的驗證后滿足需求,暫時沒有出現(xiàn)問題,也希望大家能看看有沒有問題,有的話給我點好的建議!

到此這篇關(guān)于SpringBoot+SpringSession+Redis實現(xiàn)session共享及唯一登錄示例的文章就介紹到這了,更多相關(guān)SpringBoot 唯一登錄內(nèi)容請搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: Spring
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
在线一区av| 免费视频一区二区| 欧美午夜三级| 日韩精品社区| 日韩av一区二区在线影视| 免费在线观看视频一区| 宅男噜噜噜66国产日韩在线观看| 不卡在线一区| 欧美网站在线| 日韩不卡在线| 精品在线91| 午夜久久美女| 亚洲在线免费| 亚洲精品无播放器在线播放| 亚洲人成亚洲精品| 日本特黄久久久高潮| 欧美日本久久| 精品视频黄色| 韩国三级一区| 一区久久精品| 一区二区国产在线观看| 日韩一区二区三区精品| 欧美日韩18| 精品欧美日韩精品| 日韩成人免费| 宅男在线一区| 亚欧成人精品| 精品五月天堂| 午夜久久黄色| 久久国内精品视频| 伊人网在线播放| 日韩视频在线一区二区三区 | 久久高清免费| 视频一区国产视频| 麻豆极品一区二区三区| 久久亚洲专区| 亚洲不卡视频| 国产一区二区三区免费在线| 欧美jjzz| 日本伊人久久| 9999国产精品| 亚洲一二av| 国产 日韩 欧美 综合 一区| 黄色日韩在线| 美女视频网站久久| 不卡在线一区| 国产欧美亚洲精品a| 日韩欧美1区| 日本v片在线高清不卡在线观看| 精品欧美视频| 亚洲日本国产| 日韩欧美一区二区三区免费观看| 美女国产一区| 高清久久一区| 亚洲一二三区视频| 水蜜桃精品av一区二区| 免费日韩一区二区| 精品中文字幕一区二区三区| 亚洲免费成人| 精品国产不卡一区二区| 首页国产欧美久久| 久久精品一区二区三区中文字幕| 婷婷亚洲五月| 精品国产网站| 亚洲精品自拍| 国产一区日韩一区| 国产精品v亚洲精品v日韩精品| 精品一区亚洲| 国产一区二区三区黄网站| 水蜜桃久久夜色精品一区的特点| 精品国产鲁一鲁****| 亚洲丝袜啪啪| 日韩精品水蜜桃| 国产精品视频一区二区三区四蜜臂 | 精品丝袜在线| 日本午夜免费一区二区| 免费av一区二区三区四区| 国产欧美日韩视频在线| 午夜电影亚洲| 成人午夜精品| 欧美国产日韩电影| 美女精品在线| 日韩在线二区| 国产亚洲一区二区三区啪| 在线亚洲激情| 岛国av免费在线观看| 国产剧情一区| 亚洲一二av| 亚洲精华国产欧美| 欧美aa一级| 精品视频亚洲| 国产精品一区二区av日韩在线| 美女精品一区| 国产精品av久久久久久麻豆网| 国产a亚洲精品| 国产精久久一区二区| 日本不卡视频在线观看| 日韩午夜一区| 久久中文亚洲字幕| 色在线中文字幕| 精品三区视频| 久久av免费| 国产麻豆一区二区三区精品视频| 中文字幕一区二区av| 久久亚洲欧洲| 一区三区视频| 91久久久久| 99国产精品99久久久久久粉嫩| 久久高清免费| 国产专区一区| 1024精品一区二区三区| 日韩专区精品| 国产 日韩 欧美一区| 精品国产一区二区三区噜噜噜| 国产欧美一区二区精品久久久| 91亚洲精品视频在线观看| 亚洲精品免费观看| 日韩一区二区三区四区五区| 亚洲狼人精品一区二区三区| 视频一区欧美精品| 亚洲一级淫片| 日本成人在线一区| 日韩成人av影视| 欧美精品三级在线| 国产精品亚洲产品| 久久中文字幕一区二区| 国产精品99久久精品| 97精品中文字幕| av最新在线| 在线一区视频观看| 精品中文字幕一区二区三区av| 欧美特黄一级大片| 黑丝一区二区三区| 蜜桃视频一区二区| 日韩综合小视频| 国产精品一区毛片| 成人精品动漫一区二区三区| 日韩精品永久网址| 蜜桃视频欧美| 亚洲一级淫片| 国产欧美一区二区三区国产幕精品| 国产精品xxx在线观看| 高清av一区| 日韩精品一区二区三区免费观影| 欧美日韩精品一区二区视频| 激情五月综合| 蜜桃免费网站一区二区三区| 在线观看一区| 国产精品白丝一区二区三区| 欧美国产偷国产精品三区| 999久久久亚洲| 三级亚洲高清视频| 日欧美一区二区| 麻豆视频久久| 久久精品动漫| 亚洲有吗中文字幕| 欧美黑人巨大videos精品| 欧美成人a交片免费看| 国模 一区 二区 三区| 免费久久99精品国产| 国产精品草草| 欧美亚洲国产激情| 日本午夜精品视频在线观看| 电影91久久久| 亚洲男女自偷自拍| 国产欧美一区二区精品久久久| yellow在线观看网址| 在线视频精品| 国产精品天天看天天狠| 精品亚洲美女网站| 视频一区二区中文字幕| 国产精品极品在线观看| 亚洲小说欧美另类婷婷| 一本色道精品久久一区二区三区| 日韩avvvv在线播放| 日韩免费一区| 午夜久久av | 国产欧美日韩精品一区二区三区| 国产精品国产三级国产在线观看| 国产一区导航| 欧美aaaaaa午夜精品| 欧美日韩国产免费观看视频| 亚洲欧美一级| 日韩国产欧美| 日本午夜精品久久久久| 伊人精品一区| 国产精品午夜av| 欧美va天堂在线| 鲁大师精品99久久久| 午夜在线视频一区二区区别 | 亚洲黄色免费看| 中文不卡在线| 日韩欧美精品综合| 日本一区二区三区中文字幕| 亚洲成a人片| 国产欧美日韩一区二区三区在线| 欧美日韩激情| 国产成人调教视频在线观看| 最新国产精品视频| 亚洲免费福利|