spring?boot獲取session的值為null問題及解決方法
問題描述:
我在登陸的時(shí)候,登陸成功后將name存進(jìn)了session,然后在獲取個(gè)人信息時(shí)取出session里的name的值為null.
在login里存session:
在getUserInfo里獲取session的name:
控制臺(tái)結(jié)果:
直接原因:
兩個(gè)session對象不同,即session.getId()的值不同
根本原因:
涉及前端傳參沒有攜帶cookie,后端不能證明是同一會(huì)話,故建的session不是同一個(gè)對象
解決方案:
本人前端是vue項(xiàng)目,故在main.js里添加:
axios.defaults.withCredentials = true
后端spring boot項(xiàng)目中添加:
CorsFilter.class
package com.postcode.item; import org.springframework.stereotype.Component; import javax.servlet.*; import javax.servlet.annotation.WebFilter; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; @Component @WebFilter(urlPatterns = "/*", filterName = "CorsFilter") public class CorsFilter implements Filter { @Override public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException { HttpServletResponse response = (HttpServletResponse) res; HttpServletRequest reqs = (HttpServletRequest) req; String curOrigin = reqs.getHeader("Origin"); response.setHeader("Access-Control-Allow-Origin", curOrigin == null ? "true" : curOrigin); response.setHeader("Access-Control-Allow-Credentials", "true"); response.setHeader("Access-Control-Allow-Methods", "POST, GET, PATCH, DELETE, PUT"); response.setHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept"); chain.doFilter(req, res); } @Override public void init(FilterConfig filterConfig) { } @Override public void destroy() {} }
CorsFilter.class
import org.springframework.stereotype.Component; import javax.servlet.*; import javax.servlet.annotation.WebFilter; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; @Component @WebFilter(urlPatterns = "/*", filterName = "CorsFilter") public class CorsFilter implements Filter { @Override public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException { HttpServletResponse response = (HttpServletResponse) res; HttpServletRequest reqs = (HttpServletRequest) req; String curOrigin = reqs.getHeader("Origin"); response.setHeader("Access-Control-Allow-Origin", curOrigin == null ? "true" : curOrigin); response.setHeader("Access-Control-Allow-Credentials", "true"); response.setHeader("Access-Control-Allow-Methods", "POST, GET, PATCH, DELETE, PUT"); response.setHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept"); chain.doFilter(req, res); } @Override public void init(FilterConfig filterConfig) { } @Override public void destroy() {} }
最后結(jié)果:
在之前的基礎(chǔ)上多打印了session.getId(),可以看到兩個(gè)session的id相同,并且session里的name值也取到了
參考資料:
cookie相關(guān)
Access-Control-Allow-Origin與跨域
Spring Boot如何解決前端的Access-Control-Allow-Origin跨域問題
到此這篇關(guān)于spring boot獲取session的值為null問題的文章就介紹到這了,更多相關(guān)spring boot獲取session的值為null內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Mybatis-plus常見的坑@TableField不生效問題
這篇文章主要介紹了Mybatis-plus常見的坑@TableField不生效問題,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-01-01基于LinkedHashMap實(shí)現(xiàn)LRU緩存
LinkedHashMap是Java集合中一個(gè)常用的容器,它繼承了HashMap, 是一個(gè)有序的Hash表。那么該如何基于LinkedHashMap實(shí)現(xiàn)一個(gè)LRU緩存呢?本文將介紹LinkedHashMap的實(shí)現(xiàn)原理,感興趣的同學(xué)可以參考一下2023-05-05Linux系統(tǒng)Docker拉取JDK21鏡像超細(xì)詳解
這篇文章主要介紹了如何在Linux系統(tǒng)上使用Docker拉取JDK21鏡像,并基于該鏡像搭建開發(fā)和測試環(huán)境,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-12-12SpringCloud?Gateway?DispatcherHandler調(diào)用方法詳細(xì)介紹
我們第一個(gè)關(guān)注的類就是DispatcherHandler,這個(gè)類提供的handle()方法,封裝了我們之后所有的handlerMappings,這個(gè)DispatcherHandler有點(diǎn)想SpringMVC的DispatchServlet,里面也是封裝了請求和對應(yīng)的處理方法的關(guān)系2022-10-10使用Spring實(shí)現(xiàn)@Value注入靜態(tài)字段
這篇文章主要介紹了使用Spring實(shí)現(xiàn)@Value注入靜態(tài)字段方式,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-05-05java.lang.OutOfMemoryError 錯(cuò)誤整理及解決辦法
這篇文章主要介紹了java.lang.OutOfMemoryError 錯(cuò)誤整理及解決辦法的相關(guān)資料,需要的朋友可以參考下2016-10-10