Spring獲取Cookie和Session(@CookieValue()和@SessionAttribute())
獲取 Cookie
傳統(tǒng)獲取 Cookie
這是沒有 Spring 的時候,用 Servlet 來獲?。ǐ@取所有的 Cookie)
- Spring MVC 是基于 Servlet API 構(gòu)建的原始 Web 框架,也是在 Servlet 的基礎上實現(xiàn)的
@RequestMapping("/getcookie")
public String getCookie(HttpServletRequest request,
HttpServletResponse response) {
//String name = request.getParameter("name");
Cookie cookies[] = request.getCookies();
if (cookies != null) {
//將 Cookie 轉(zhuǎn)成了數(shù)據(jù)流,然后進行循環(huán)
Arrays.stream(cookies).forEach(ck -> System.out.println
(ck.getName() + ":" + ck.getValue()));
}
return "獲取Cookie成功";
}
- HttpServletRequest 代表 HTTP 的請求,HTTP 請求里面有什么,這個對象里面就有什么
- HttpServletResponse 代表 HTTP 的響應,HTTP 響應里面有什么,這個對象里面就有什么
這兩個對象屬于 Spring 的內(nèi)置對象,需要就加上,不用就不用寫
Cookie 是一個數(shù)組,所以進行循環(huán)打印
進入網(wǎng)頁后,Cookie 可以直接進行修改(F12)。然后在里面添加信息,name=bite,value=666,隨后保存

之后刷新,可在服務端看到 Cookie 信息

- Spring MVC 是基于 Servlet API 構(gòu)建的原始 Web 框架,也是在 Servlet 的基礎上實現(xiàn)的
- HttpServletRequest,HttpServletResponse 是 Servlet 提供的兩個類,是 Spring MVC 方法的內(nèi)置對象,需要時直接在方法中添加聲明即可
- HttpServletRequest 對象代表客戶端的請求,當客戶端通過 HTTP 協(xié)議訪問服務器時,HTTP 請求頭中的所有信息都封裝在這個對象中,通過這個對象提供的方法,可以獲得客戶端請求的所有信息
- HttpServletResponse 對象代表服務器的響應。HTTP 響應的信息都在這個對象中,比如向客戶端發(fā)送的數(shù)據(jù),響應頭,狀態(tài)碼等。通過這個對象提供的方法,可以獲得服務器響應的所以內(nèi)容
- Spring MVC 在這兩個對象的基礎上進行封裝,給我們提供更加簡單的使用方法
簡潔獲取 Cookie(注解)
Spring MVC 在這兩個對象的基礎上進行封裝,給我們提供更加簡單的使用方法
上面獲取的話,就是獲取的所有的 Cookie,而如果想要獲取某個 Cookie,就需要使用 @CookieValue
@RequestMapping("/getcookie2")
public String getCookie2(@CookieValue("bite") String bite) {
return "從Cookie中獲取值, bite:"+bite;
}
@CookieValue 里面的值,就是你要獲取的 Cookie

獲取 Session
Session 存儲和獲取
傳統(tǒng)方式也是用 Servlet 進行實現(xiàn)的
@RequestMapping("/getsession")
public String getsession(HttpServletRequest request) {
//從 Cookie 中獲取到了 SessionId,根據(jù) Session 獲取 Session對象
HttpSession session = request.getSession();
String name = (String) session.getAttribute("name");
return "從session中獲取name:"+name;
}
- 第四行是從
Cookie中獲取到SessionId,然后根據(jù)SessionId獲取到Session對象 - 然后通過
getAttribute來獲取你要拿的值
因為 session 是在服務器中進行存儲的,所以就不能像前面 Cookie 一樣可以直接“偽造”了。就需要學習如何設置 session
@RequestMapping("/setsession")
public String setSession(HttpServletRequest request){
//從 Cookie 中獲取到了SessionId,根據(jù) SessionId 獲取Session對象
//如果沒有獲取到,就會創(chuàng)建一個Session對象
HttpSession session = request.getSession();
session.setAttribute("name","zhangsan");
return "設置session成功";
}
- 首先是在
Cookie中獲取SessionId,然后根據(jù)SessionId獲取Session對象。如果沒有獲取到,就會創(chuàng)建一個Session對象 - 創(chuàng)建好
Session之后,就可以進行設置了- 使用
setAttribute進行設置,前面是name,后面是value
- 使用
可以通過 Fiddler 進行觀察

之后就可以通過 SessionId 獲取到 Session 的值了

如果擅自將下面的 SessionId 改了,就獲取不到 Session 了

簡潔獲取 Session (1)
封裝一些冗余的過程
@RequestMapping("/getsession2")
public String getsession2(HttpSession session){
String name = (String) session.getAttribute("name");
return "從session中獲取name"+name;
}
- 這里
HttpSession就直接省略了自己getSession的過程,直接就給我們提供了一個Session
簡潔獲取 Session (2)
更進一步,能直接給到我們想要的 name 的值嗎
@RequestMapping("/getsession3")
public String getsession3(@SessionAttribute("name") String name){
//String name = (String) session.getAttribute("name");
return "從session中獲取name:"+name;
}
這里的 @SessionAttribute 里面的值就是想要獲取的 Session 的值,省略掉了指定 name 的步驟

到此這篇關于Spring獲取Cookie和Session(@CookieValue()和@SessionAttribute())的文章就介紹到這了,更多相關Spring獲取Cookie和Session內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
SpringBoot讀取自定義配置文件方式(properties,yaml)
這篇文章主要介紹了SpringBoot讀取自定義配置文件方式(properties,yaml),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-07-07
Java如何自定義類數(shù)組的創(chuàng)建和初始化
這篇文章主要介紹了Java如何自定義類數(shù)組的創(chuàng)建和初始化,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-10-10

