最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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)目中沒有使用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í)間沒有活動(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”,開啟權(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)求列表中加上xhrFields參數(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)文章

  • 詳解常用的Spring Bean擴(kuò)展接口

    詳解常用的Spring Bean擴(kuò)展接口

    本篇文章主要介紹了一些常用的Spring Bean擴(kuò)展接口以及它們的簡(jiǎn)單用法,具有很好的參考價(jià)值。下面跟著小編一起來(lái)看下吧
    2017-05-05
  • Java中加鎖的方式代碼示例

    Java中加鎖的方式代碼示例

    這篇文章主要給大家介紹了關(guān)于Java中加鎖方式的相關(guān)資料,我們平時(shí)開發(fā)的過(guò)程中難免遇到多線程操作共享資源的時(shí)候,這時(shí)候一般可以通過(guò)加鎖的方式保證操作的安全性,需要的朋友可以參考下
    2023-09-09
  • 詳解spring中的Aware接口功能

    詳解spring中的Aware接口功能

    Spring的依賴注入的最大亮點(diǎn)是所有的Bean對(duì)Spring容器的存在是沒有意識(shí)的,我們可以將Spring容器換成其他的容器,Spring容器中的Bean的耦合度因此也是極低的,本文重點(diǎn)給大家介紹spring中的Aware接口,感興趣的朋友一起看看吧
    2022-02-02
  • 如何用java實(shí)現(xiàn)分頁(yè)查詢

    如何用java實(shí)現(xiàn)分頁(yè)查詢

    這篇文章主要介紹了如何用java實(shí)現(xiàn)分頁(yè)查詢,文中講解非常細(xì)致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-06-06
  • Java中的BigDecimal精度運(yùn)算詳解

    Java中的BigDecimal精度運(yùn)算詳解

    這篇文章主要介紹了Java中的BigDecimal精度運(yùn)算詳解,Java在java.math包中提供的API類BigDecimal,用來(lái)對(duì)超過(guò)16位有效位的數(shù)進(jìn)行精確的運(yùn)算,雙精度浮點(diǎn)型變量double可以處理16位有效數(shù),但在實(shí)際應(yīng)用中,可能需要對(duì)更大或者更小的數(shù)進(jìn)行運(yùn)算和處理,需要的朋友可以參考下
    2023-10-10
  • @RequestBody的使用詳解

    @RequestBody的使用詳解

    這篇文章主要介紹了@RequestBody的使用詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • Java NIO無(wú)法綁定指定IP和端口解決方案

    Java NIO無(wú)法綁定指定IP和端口解決方案

    這篇文章主要介紹了Java NIO無(wú)法綁定指定IP和端口解決方案,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-10-10
  • SpringMVC實(shí)現(xiàn)簡(jiǎn)單跳轉(zhuǎn)方法(專題)

    SpringMVC實(shí)現(xiàn)簡(jiǎn)單跳轉(zhuǎn)方法(專題)

    這篇文章主要介紹了SpringMVC實(shí)現(xiàn)簡(jiǎn)單跳轉(zhuǎn)方法(專題),詳細(xì)的介紹了SpringMVC跳轉(zhuǎn)的幾種方法,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2018-03-03
  • 詳解mybatis通過(guò)mapper接口加載映射文件

    詳解mybatis通過(guò)mapper接口加載映射文件

    本篇文章主要介紹了mybatis通過(guò)mapper接口加載映射文件 ,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-08-08
  • springboot2.3 整合mybatis-plus 高級(jí)功能(圖文詳解)

    springboot2.3 整合mybatis-plus 高級(jí)功能(圖文詳解)

    這篇文章主要介紹了springboot2.3 整合mybatis-plus 高級(jí)功能,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-08-08

最新評(píng)論

安溪县| 方正县| 安阳市| 德兴市| 巨鹿县| 陈巴尔虎旗| 抚顺市| 怀仁县| 清流县| 留坝县| 台北县| 普兰店市| 岗巴县| 克拉玛依市| 蓝山县| 五家渠市| 阿拉尔市| 金湖县| 绍兴县| 宁海县| 烟台市| 宁化县| 蛟河市| 吕梁市| 砚山县| 株洲县| 咸丰县| 东阳市| 乃东县| 九江县| 恩施市| 大洼县| 会东县| 突泉县| 鄯善县| 井研县| 杭锦后旗| 报价| 方山县| 南充市| 米林县|