Springboot如何去掉URL后面的jsessionid_第1頁
Springboot如何去掉URL后面的jsessionid_第2頁
Springboot如何去掉URL后面的jsessionid_第3頁
Springboot如何去掉URL后面的jsessionid_第4頁
Springboot如何去掉URL后面的jsessionid_第5頁
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

第Springboot如何去掉URL后面的jsessionid目錄如何去掉URL后面的jsessionidurl中有Jsessionid生成的原因解決方式一解決方式二Java關(guān)于jsessionid和URL對(duì)SEO的沖擊安全問題解決之道

如何去掉URL后面的jsessionid

url中有Jsessionid生成的原因

jsessionid是標(biāo)明session的id,它存在于cookie中,一般情況不會(huì)出現(xiàn)在url中,服務(wù)器會(huì)從客戶端的cookie中取出來,但是如果客戶端禁用了cookie的話,就要重寫url了,顯式的將jsessionid重寫到Url中,方便服務(wù)器來通過這個(gè)找到session的id。

如果客戶端請求的cookie中不包含JSESSIONID,服務(wù)端調(diào)用request.getSession()時(shí)就會(huì)生成并傳遞給客戶端,此次響應(yīng)頭會(huì)包含設(shè)置cookie的信息

如果客戶端請求的cookie中包含JSESSIONID,服務(wù)端調(diào)用request.getSession()時(shí)就會(huì)根據(jù)JSESSIONID進(jìn)行查找對(duì)象,如果能查到就返回,否則就跟沒傳遞JSESSIONID一樣;

解決方式一

springBoot2.0之前版本

在.yml配置文件中做如下配置

解決方式二

在啟動(dòng)類中繼承SpringBootServletInitializer,然后重寫這個(gè)方法(此方法在springBoot2.0之前版本沒有起作用,暫時(shí)做記錄)

publicvoidonStartup(ServletContextservletContext)throwsServletException{

super.onStartup(servletContext);

//ThiswillsettouseCOOKIEonly

servletContext.setSessionTrackingModes(

Collections.singleton(SessionTrackingMode.COOKIE)

//ThiswillpreventanyJSonthepagefromaccessingthe

//cookie-itwillonlybeused/accessedbytheHTTPtransport

//mechanisminuse

SessionCookieConfigsessionCookieConfig=

servletContext.getSessionCookieConfig();

sessionCookieConfig.setHttpOnly(true);

}

Java關(guān)于jsessionid和URL

在寫JSP程序時(shí),經(jīng)常發(fā)現(xiàn)url中有一個(gè)jsessionid參數(shù),在刷新之后就消失了。一些人認(rèn)為這是個(gè)一個(gè)BUG。

這不是一個(gè)bug。當(dāng)一個(gè)新的session被創(chuàng)建時(shí),server并不確定客戶端是否支持cookies,所以它生成了一個(gè)cookie,就是URL中jsessionid的值。當(dāng)客戶端在第二次帶著cookie返回時(shí),服務(wù)器就知道jsessionid不是必須的,所以就會(huì)刪掉它。如果客戶端沒有帶著cookie返回,服務(wù)器就會(huì)繼續(xù)在url中添加jsessionid參數(shù)。

但是現(xiàn)在幾乎很難想象瀏覽器會(huì)不支持cookie。jsessionid參數(shù)也可能會(huì)給SEO和安全帶來一定問題。

對(duì)SEO的沖擊

有些搜索引擎可能會(huì)懲罰(找不到更好的詞形容)那些具有多個(gè)不同url但內(nèi)容相同的網(wǎng)站。因?yàn)閟essionid是唯一的,所以多個(gè)搜索機(jī)器人將返回相同的內(nèi)容但url不同。

這是一個(gè)嚴(yán)重的問題。我們試一下用google搜索inurl:;jsessionid,Google的搜索結(jié)果:About211,000,000results(0.25seconds)

安全問題

在url中包含sessionId不是一個(gè)明智之舉,這將為攻擊者提供便利。

解決之道

不幸的是ServletSpecification和ServletContainers中并未提供一個(gè)標(biāo)準(zhǔn)的方法去禁止在url中帶jsessionid。

不過我們可以通過servletfilter去解決這個(gè)問題。

packagecom.lgete.web.filter;

importjava.io.IOException;

importjavax.servlet.*;

importjavax.servlet.http.*;

*@authorZhuJiaa

*href="mailto:zhujia7895@"rel="externalnofollow"zhujia7895@/a

publicclassURLSessionFilterimplementsFilter{

publicvoiddoFilter(ServletRequestrequest,ServletResponseresponse,

FilterChainchain)throwsIOException,ServletException{

if(!(requestinstanceofHttpServletRequest)){

chain.doFilter(request,response);

return;

HttpServletResponsehttpResponse=(HttpServletResponse)response;

HttpServletResponseWrapperwrappedResponse=newHttpServletResponseWrapper(

httpResponse){

publicStringencodeRedirectUrl(Stringurl){

returnurl;

publicStringencodeRedirectURL(Stringurl){

returnurl;

publicStringencodeUrl(Stringurl){

returnurl;

publicStringencodeURL(Stringurl){

returnurl;

chain.doFilter(request,wrappedResponse);

publicvoidinit(FilterConfigfilterConfig){

publicvoiddestroy(){

}

在web.xml中添加以下內(nèi)容:

filter

filter-nameURLSessionFilter/filter-name

filter-classzj.web.filter.URLSessionFilter/filter-class

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論