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

springboot普通類中如何獲取session問題

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

Spring中普通類獲取session

項目中日志功能

記錄所有通過后臺操作的記錄,記錄項有

時間、操作員、功能模塊、操作內容

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

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

可是項目中沒有使用token,使用的是session綁定登錄信息,需要在@Aspect中獲取到用戶信息

解決方案

public class ServletUtil {

? ? public static ServletRequestAttributes getRequestAttributes() {

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

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

SpringBoot中使用session

基礎知識

Cookie

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

Session

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

在 Spring Boot中使用

設置useHttpOnly

jar 項目

在配置文件中設置:

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

war項目

在context.xml文件中的Context添加屬性useHttpOnly

<Context useHttpOnly="false"><Context>

設置Cookie

場景:首次請求時跳轉到指定頁面,頁面再通過ajax向后臺請求數(shù)據(jù),進行頁面渲染。跳轉頁面時,需要指定cookie,否則會出現(xiàn)項目部署到外部tomcat時,cookie無法寫入的情況,造成ajax請求時,兩次的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 請求時帶上cookie

在請求列表中加上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");
? ? ? }
? }
})

總結

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • 詳解常用的Spring Bean擴展接口

    詳解常用的Spring Bean擴展接口

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

    Java中加鎖的方式代碼示例

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

    詳解spring中的Aware接口功能

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

    如何用java實現(xiàn)分頁查詢

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

    Java中的BigDecimal精度運算詳解

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

    @RequestBody的使用詳解

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

    Java NIO無法綁定指定IP和端口解決方案

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

    SpringMVC實現(xiàn)簡單跳轉方法(專題)

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

    詳解mybatis通過mapper接口加載映射文件

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

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

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

最新評論

石家庄市| 东乌| 合肥市| 陆河县| 常德市| 衡阳市| 萨嘎县| 高清| 云和县| 漳浦县| 勃利县| 平乡县| 汾西县| 玛沁县| 历史| 兰溪市| 广平县| 环江| 秦皇岛市| 南木林县| 乐山市| 昆山市| 阿克陶县| 米泉市| 绵阳市| 大连市| 团风县| 邳州市| 丰顺县| 翁牛特旗| 册亨县| 南皮县| 襄城县| 霍邱县| 江津市| 阿勒泰市| 沭阳县| 钦州市| 玉树县| 望都县| 汾西县|