iT邦幫忙

2018 iT 邦幫忙鐵人賽
DAY 16
1
Modern Web

30天學習Spring MVC系列 第 16

Day 16 Spring Boot-Spring Session介紹(下)

  • 分享至 

  • xImage
  •  

前言

我已經將Windows Session建置到Redis了,不過解決辦法跟配置今天可能沒辦法一次打完,
因為本次參賽是沒有事先將文章都打好,是每天花一點點時間來為大家實作測試+Demo介紹
請各位見諒,最近的事情挺多的感覺好累...

如何使用Session

public String doLogin(@ModelAttribute MemberAccountJPA memberAccountJPA,HttpSession session){

我們只要在Controller對應的方法內增加HttpSession session
變可以得到使用者的session且設置session的屬性

當使用者帳號密碼查詢出來是一致的沒有錯誤
並可以使用setAttribute方法將object存入session中

ex:

session.setAttribute("uid", memberAccount); //將memberAccount object存入session命名為uid

如果要登出的話我們只要先判斷
uid是否為空值,如果不為null我們再將她的session刪除即可完成登出的功能
ex:

if(session.getAttribute("uid")!=null){
  	session.removeAttribute(uid);
}

剩下的有空會補

什麼是Session?

session與Cookie是為了在HTTP協定上維持會話的狀態,好比說公司員工進到公司需要有員工證當一個識別的身分,
那http協定上要如何識別一個使用者的身分?
如此session與Cookie技術就此誕生了

session是服務器端的就是我們的Server端,存放在一種散列表的結構來保存訊息,當使用者登入的時候我們伺服器端會去尋找這個人的身分有無符合存放在我們伺服器端的資訊,如果他並沒有進行登入過的狀態則我們必須要求他做登入帳號密碼的認證

什麼是Cookie?

Cookie (小甜餅? 有點特別吧XD),Cookie是將資料儲存於客戶端,在客戶端訪問了某個URL後,伺服器端在header中設定了此 Set-Cookie HTTP Header的資訊,而瀏覽器則會將此訊息紀錄在瀏覽器的Cookie存放區,他會記住Cookie的隸屬網路,名稱,時間等訊息
當使用者在次的請求URL時,Server就會查看你的Cookie有無過期,通常應用在網路檔案的傳輸上非常實用,我們伺服器端可以知道是否要再重新將所有檔案傳送給使用者,如果每一次瀏覽內容都要將網站內的js,css,image都在重新傳送一次那效能不是會很好的

實現Spring Boot session Redis

pom.xml 配置

加入 spring-session-data-redis依賴

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

application.properties

# REDIS (RedisProperties)
# Redis資料庫索引(默認配置為0)
spring.redis.database=0  
# Redis伺服器host
spring.redis.host=localhost
# Redis伺服器Port接口
spring.redis.port=6379  
# Redis伺服器密碼默認為0可在redis.windows.conf依照自行需求添加
spring.redis.password=  
# 連接持最大限制(pool)
spring.redis.pool.max-active=8  
# 連接池最大阻塞時間(負數沒有限制)
spring.redis.pool.max-wait=-1  
# 連接池最大空間
spring.redis.pool.max-idle=8  
# 連接池最小閒置空間
spring.redis.pool.min-idle=0  
# timeout(毫秒)
spring.redis.timeout=0  

在com.tutorial package建立一個class

RedisSessionConfig.java(RedisSession設定)


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

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

在之前的MemberController中的doLogin做修改

1.加入HttpSession session
2.session.setAttribute("uid", memberAccount);

	@PostMapping("/doLogin")
    public String doLogin(@ModelAttribute MemberAccountJPA memberAccountJPA,HttpSession session){
		String email = memberAccountJPA.getEmail();
		String password = memberAccountJPA.getPassword();
		List<MemberAccountJPA> MemberAccountJPAList = new ArrayList<MemberAccountJPA>();
		MemberAccountJPAList = memberRepository.findCheckMemberAccount(email, password);
		MemberAccount memberAccount = new  MemberAccount();
		memberAccount.setPassword(password);
		memberAccount.setEmail(email);;

		if(MemberAccountJPAList.size()==0){
			return "login";
		}
		else{
			session.setAttribute("uid", memberAccount);
	        return "welcome";
		}

    }

完成後開啟redis-ci.exe

下keys 'sessions'指令

https://ithelp.ithome.com.tw/upload/images/20180104/20107812BYS05KzhDA.png

https://ithelp.ithome.com.tw/upload/images/20180104/20107812mYrtadCpsd.png

重點介紹

1.上集會補Windows安裝Redis步驟及問題排除
2.這集介紹配置

參考資料

(https://www.cnblogs.com/ityouknow/p/5748830.html ) Spring Boot redis session配置


上一篇
Day 15-Spring Boot - Spring Session介紹(上)
下一篇
Day 17 Spring Boot-檔案上傳篇
系列文
30天學習Spring MVC30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 則留言

0
cachx
iT邦新手 5 級 ‧ 2018-12-28 19:55:43

需要加入
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

输入
keys '*sessions*'

0
qsc236578
iT邦新手 5 級 ‧ 2019-08-05 15:32:05

session.setAttribute("uid", memberAccount);
System.out.println("進入的人:"+session.getId());

login登入後spring 有印出getid()
但是在redis-cli 內用key "sessions" 卻呈現empty
請問該如何解決

確認過阜6379 Redis-server有開啟
/images/emoticon/emoticon02.gif

keys 'sessions'

我要留言

立即登入留言