欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

springboot普通類中如何獲取session問(wèn)題

 更新時(shí)間:2023年01月12日 11:05:03   作者:tcoding  
這篇文章主要介紹了springboot普通類中如何獲取session問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

Spring中普通類獲取session

項(xiàng)目中日志功能

記錄所有通過(guò)后臺(tái)操作的記錄,記錄項(xiàng)有

時(shí)間、操作員、功能模塊、操作內(nèi)容

寫了一個(gè)基于注解方式的aop,實(shí)現(xiàn)日志功能

使用shiro的話可以直接獲取到用戶的token,然后獲取到用戶登錄信息

可是項(xiàng)目中沒(méi)有使用token,使用的是session綁定登錄信息,需要在@Aspect中獲取到用戶信息

解決方案

public class ServletUtil {

? ? public static ServletRequestAttributes getRequestAttributes() {

? ? ? ? return (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
? ? }

? ? public static HttpServletRequest getRequest() {
? ? ? ? return getRequestAttributes().getRequest();
? ? }
}

SpringBoot中使用session

基礎(chǔ)知識(shí)

Cookie

  • Cookie由服務(wù)器端創(chuàng)建,然后添加到 HttpServletResponse 中發(fā)送給客戶端(瀏覽器)。
  • 可以添加多個(gè)cookie鍵值對(duì)。
  • Cookie 由鍵值名和鍵值組成。相同 domain 和 path 中的鍵值名不能重復(fù),添加鍵值名重名的鍵值對(duì)會(huì)覆蓋上一個(gè)同名的鍵值對(duì)。
  • 添加 Cookie 時(shí),需要指定cookie所在域(setDomain), 路徑(setPath),指定存在時(shí)長(zhǎng)(setMaxAge)。
  • 服務(wù)端創(chuàng)建好cookie后提交給客戶端,之后瀏覽器的每次請(qǐng)求(HttpServletRequest)里都會(huì)攜帶cookie數(shù)組。
  • springmvc有兩種方式獲?。海?)在控制器函數(shù)中通過(guò)對(duì)參數(shù)注解@CookieValue(鍵值名),獲取指定某個(gè)cookie。(2)通過(guò) HttpServletRequest 中的 getcookies 方法獲取 cookie 數(shù)組,然后迭代里面的每一個(gè) cookie 鍵值對(duì)。

Session

  • 服務(wù)器會(huì)根據(jù)客戶端的請(qǐng)求 HttpServletRequest 創(chuàng)建 session=request.getSession()。
  • 每一個(gè) session 都有一個(gè)唯一的標(biāo)示 sessionID ,可通過(guò) request.getSession().getId()獲得。
  • session是存儲(chǔ)在服務(wù)器端的,每一個(gè) session 都有一個(gè)id,當(dāng)創(chuàng)建一個(gè) session 后,會(huì)將該 sessionID 存放到此次訪問(wèn)的 cookie 中,當(dāng)下次客戶端的訪問(wèn)到來(lái)需要提取服務(wù)器中的 session時(shí),會(huì)根據(jù)訪問(wèn)中 cookie 里的 sessionID 值來(lái)找到服務(wù)器中的具體 session。
  • 訪問(wèn)靜態(tài)資源時(shí)不會(huì)創(chuàng)建 session
  • 服務(wù)器會(huì)把長(zhǎng)時(shí)間沒(méi)有活動(dòng)的 session 從服務(wù)器內(nèi)存中清除,此時(shí) session 便失效。Tomcat 中 session的默認(rèn)失效時(shí)間為 20分鐘
  • Tomcat 7以上的版本中默認(rèn)禁止客戶端腳本讀取session Id,需要在context.xml中設(shè)置useHttpOnly=”false”,開(kāi)啟權(quán)限。

在 Spring Boot中使用

設(shè)置useHttpOnly

jar 項(xiàng)目

在配置文件中設(shè)置:

server.servlet.session.cookie.http-only=false

war項(xiàng)目

在context.xml文件中的Context添加屬性u(píng)seHttpOnly

<Context useHttpOnly="false"><Context>

設(shè)置Cookie

場(chǎng)景:首次請(qǐng)求時(shí)跳轉(zhuǎn)到指定頁(yè)面,頁(yè)面再通過(guò)ajax向后臺(tái)請(qǐng)求數(shù)據(jù),進(jìn)行頁(yè)面渲染。跳轉(zhuǎn)頁(yè)面時(shí),需要指定cookie,否則會(huì)出現(xiàn)項(xiàng)目部署到外部tomcat時(shí),cookie無(wú)法寫入的情況,造成ajax請(qǐng)求時(shí),兩次的sessionId不一致。

@RequestMapping(value="/query", method=RequestMethod.GET)
public ModeAndView queryInfo(@RequestParam(value="sq")String sq,
? ? ? ? ? ? ? ? ? ? ? ? ? HttpServletRequest request,
? ? ? ? ? ? ? ? ? ? ? ? ? HttpServletResponse response
? ? ? ? ? ? ? ? ? ? ? ? ? ) {
?
? ? ? ModeAndView view = new ModeAndView();
? ? ? //... view 操作
? ? ? Cookie[] cookies = request.getCookies();
? ? ? String sessionId = request.getSession().getId();
? ? ? if (cookies == null) {
? ? ? ? ? Cookie cookie = new Cookie("JSESSIONID", sessionId);
? ? ? ? ? cookie.setMaxAge(5 * 60);
? ? ? ? ? cookie.setDomian("localhost");
? ? ? ? ? cookie.setPath("/hand");
? ? ? ? ? response.addCookie(cookie);
? ? ? } else {
? ? ? ? ? for (Cookie cookie : cookies) {
? ? ? ? ? ? ? if (cookie.getName().equals("JSESSIONID")) {
? ? ? ? ? ? ? ? ? cookie.setMaxAge(5 * 60);
? ? ? ? ? ? ? ? ? cookie.setValue(sessionId);
? ? ? ? ? ? ? ? ? cookie.setDomain("localhost");
? ? ? ? ? ? ? ? ? cookie.setPath("/hand");
? ? ? ? ? ? ? ? ? response.addCookie(cookie);
? ? ? ? ? ? ? ? ? break;
? ? ? ? ? ? ? }
? ? ? ? ? }
? ? ? }
?
? ? ? return view;
}

ajax 請(qǐng)求時(shí)帶上cookie

在請(qǐng)求列表中加上x(chóng)hrFields參數(shù)。

var s = $.ajax({
? type: "get",
? timeout: 8000,
? xhrFields: { withCredentials: true},
? url: "/hand/val",
? data: {"params": ""},
? success: function(rel) {
? ? ? console.log(rel)
? },
? error: function() {
? ? ? console.log("failed")
? },
? complete: function(XMLHttpRequest, status) {
? ? ? if (status == "timeout") {
? ? ? ? ? s.abort();
? ? ? ? ? console.log("timeout");
? ? ? }
? }
})

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • SpringBoot監(jiān)控模塊Actuator的用法詳解

    SpringBoot監(jiān)控模塊Actuator的用法詳解

    Spring?Boot?Actuator?是?Spring?Boot?自帶的一個(gè)功能模塊,提供了一組已經(jīng)開(kāi)箱即用的生產(chǎn)環(huán)境下常用的特性和服務(wù),比如應(yīng)用程序的健康檢查、信息暴露、度量收集、日志記錄等,本文將給大家詳細(xì)SpringBoot監(jiān)控模塊Actuator的用法
    2023-06-06
  • IDEA搭建配置Java?Web項(xiàng)目的詳細(xì)步驟

    IDEA搭建配置Java?Web項(xiàng)目的詳細(xì)步驟

    這篇文章詳細(xì)介紹了如何使用IDEA創(chuàng)建和配置JavaWeb項(xiàng)目,包括項(xiàng)目結(jié)構(gòu)設(shè)置、WEB-INF目錄和jsp文件的創(chuàng)建,以及Tomcat的配置,是Java初學(xué)者的實(shí)用指南,需要的朋友可以參考下
    2024-10-10
  • Java mongodb連接配置實(shí)踐

    Java mongodb連接配置實(shí)踐

    這篇文章主要介紹了Java mongodb連接配置實(shí)踐,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-12-12
  • Spring超詳細(xì)講解事務(wù)和事務(wù)傳播機(jī)制

    Spring超詳細(xì)講解事務(wù)和事務(wù)傳播機(jī)制

    Spring事務(wù)的本質(zhì)就是對(duì)數(shù)據(jù)庫(kù)事務(wù)的支持,沒(méi)有數(shù)據(jù)庫(kù)事務(wù),Spring是無(wú)法提供事務(wù)功能的。Spring只提供統(tǒng)一的事務(wù)管理接口,具體實(shí)現(xiàn)都是由數(shù)據(jù)庫(kù)自己實(shí)現(xiàn)的,Spring會(huì)在事務(wù)開(kāi)始時(shí),根據(jù)當(dāng)前設(shè)置的隔離級(jí)別,調(diào)整數(shù)據(jù)庫(kù)的隔離級(jí)別,由此保持一致
    2022-06-06
  • Mac下設(shè)置Java默認(rèn)版本的方法

    Mac下設(shè)置Java默認(rèn)版本的方法

    今天工作的時(shí)候發(fā)現(xiàn)了一個(gè)錯(cuò)誤,提示java版本太低,無(wú)法啟動(dòng)!想起自己裝過(guò)高版本的Java,但是卻沒(méi)有默認(rèn)啟動(dòng),從網(wǎng)上找了一些資料,整理下現(xiàn)在分享給大家,有需要的可以參考借鑒。
    2016-10-10
  • 淺談選擇、冒泡排序,二分查找法以及一些for循環(huán)的靈活運(yùn)用

    淺談選擇、冒泡排序,二分查找法以及一些for循環(huán)的靈活運(yùn)用

    下面小編就為大家?guī)?lái)一篇淺談選擇、冒泡排序,二分查找法以及一些for循環(huán)的靈活運(yùn)用。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-06-06
  • Java實(shí)現(xiàn)斗地主與猜數(shù)字游戲詳細(xì)流程

    Java實(shí)現(xiàn)斗地主與猜數(shù)字游戲詳細(xì)流程

    這篇文章主要介紹了怎么用Java來(lái)寫斗地主種洗牌和發(fā)牌的功能,以及猜數(shù)字的游戲,斗地主相信大家都知道,同時(shí)也知道每一局都要洗牌打亂順序再發(fā)牌,本篇我們就來(lái)實(shí)現(xiàn)它們能,感興趣的朋友跟隨文章往下看看吧
    2022-04-04
  • Java 8中map()和flatMap()方法區(qū)別詳解

    Java 8中map()和flatMap()方法區(qū)別詳解

    這篇文章主要為大家介紹了Java 8中map()和flatMap()方法區(qū)別詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-07-07
  • spring聲明式事務(wù)@Transactional開(kāi)發(fā)常犯的幾個(gè)錯(cuò)誤及最新解決方案

    spring聲明式事務(wù)@Transactional開(kāi)發(fā)常犯的幾個(gè)錯(cuò)誤及最新解決方案

    使用聲明式事務(wù)@Transactional進(jìn)行事務(wù)一致性的管理,在開(kāi)發(fā)過(guò)程中,發(fā)現(xiàn)很多開(kāi)發(fā)同學(xué)都用錯(cuò)了spring聲明式事務(wù)@Transactional或使用不規(guī)范,導(dǎo)致出現(xiàn)各種事務(wù)問(wèn)題,這篇文章主要介紹了spring聲明式事務(wù)@Transactional開(kāi)發(fā)常犯的幾個(gè)錯(cuò)誤及解決辦法,需要的朋友可以參考下
    2024-02-02
  • SpringBoot整合EasyExcel實(shí)現(xiàn)導(dǎo)入導(dǎo)出功能

    SpringBoot整合EasyExcel實(shí)現(xiàn)導(dǎo)入導(dǎo)出功能

    EasyExcel是一個(gè)基于Java的、快速、簡(jiǎn)潔、解決大文件內(nèi)存溢出的Excel處理工具,他能讓你在不用考慮性能、內(nèi)存的等因素的情況下,快速完成Excel的讀、寫等功能,本文就給大家介紹一下SpringBoot整合EasyExcel實(shí)現(xiàn)導(dǎo)入導(dǎo)出功能的方法,需要的朋友可以參考下
    2023-09-09

最新評(píng)論