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

Springboot如何去掉URL后面的jsessionid

 更新時間:2021年11月19日 15:04:13   作者:余_小凡  
這篇文章主要介紹了Springboot如何去掉URL后面的jsessionid,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

如何去掉URL后面的jsessionid

url中有Jsessionid生成的原因

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

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

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

解決方式一

springBoot2.0之前版本

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

解決方式二

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

public void onStartup(ServletContext servletContext) throws ServletException {
        super.onStartup(servletContext);
 
        // This will set to use COOKIE only
        servletContext.setSessionTrackingModes(
                Collections.singleton(SessionTrackingMode.COOKIE)
        );
        // This will prevent any JS on the page from accessing the
        // cookie - it will only be used/accessed by the HTTP transport
        // mechanism in use
        SessionCookieConfig sessionCookieConfig =
                servletContext.getSessionCookieConfig();
        sessionCookieConfig.setHttpOnly(true);
    }

Java關(guān)于jsessionid和URL

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

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

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

對SEO的沖擊

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

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

安全問題

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

解決之道

不幸的是Servlet Specification和Servlet Containers中并未提供一個標準的方法去禁止在url中帶jsessionid。

不過我們可以通過servlet filter去解決這個問題。

package com.lgete.web.filter;
import java.io.IOException;
import javax.servlet.*;
import javax.servlet.http.*;
 
/**
 * @author Zhu Jia <a
 *         href="mailto:zhujia7895@gmail.com" rel="external nofollow" >zhujia7895@gmail.com</a>
 * 
 */
public class URLSessionFilter implements Filter {
    public void doFilter(ServletRequest request, ServletResponse response,
            FilterChain chain) throws IOException, ServletException {
        if (!(request instanceof HttpServletRequest)) {
            chain.doFilter(request, response);
            return;
        }
 
        HttpServletResponse httpResponse = (HttpServletResponse) response;
        HttpServletResponseWrapper wrappedResponse = new HttpServletResponseWrapper(
                httpResponse) { 
            public String encodeRedirectUrl(String url) {
                return url; 
            }
 
            public String encodeRedirectURL(String url) { 
                return url; 
            }
 
            public String encodeUrl(String url) { 
                return url; 
            }
 
            public String encodeURL(String url) { 
                return url; 
            } 
        }; 
        chain.doFilter(request, wrappedResponse); 
    }
 
    public void init(FilterConfig filterConfig) { 
    } 
    public void destroy() { 
    } 
}

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

<filter>     
    <filter-name>URLSessionFilter</filter-name>
    <filter-class>zj.web.filter.URLSessionFilter</filter-class>
</filter>
 
<filter-mapping>
    <filter-name>URLSessionFilter</filter-name>    
    <url-pattern>/*</url-pattern>
</filter-mapping>

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

相關(guān)文章

  • idea批量啟動多個微服務(wù)具體實現(xiàn)

    idea批量啟動多個微服務(wù)具體實現(xiàn)

    這篇文章主要給大家介紹了關(guān)于idea批量啟動多個微服務(wù)的具體實現(xiàn),在微服務(wù)開發(fā)過程中,我們經(jīng)常要在本地啟動很多個微服務(wù),文中通過圖文介紹的非常詳細,需要的朋友可以參考下
    2023-07-07
  • Java的接口調(diào)用時的權(quán)限驗證功能的實現(xiàn)

    Java的接口調(diào)用時的權(quán)限驗證功能的實現(xiàn)

    這篇文章主要介紹了Java的接口調(diào)用時的權(quán)限驗證功能的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • 淺談java Properties類的使用基礎(chǔ)

    淺談java Properties類的使用基礎(chǔ)

    下面小編就為大家分享一篇淺談java Properties類的使用基礎(chǔ),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-01-01
  • Springboot3利用redis生成唯一訂單號的實現(xiàn)示例

    Springboot3利用redis生成唯一訂單號的實現(xiàn)示例

    本文主要介紹了Springboot3利用redis生成唯一訂單號的實現(xiàn)示例,包括UUID、雪花算法和數(shù)據(jù)庫約束,具有一定的參考價值,感興趣的可以了解一下
    2025-03-03
  • Spring使用RestTemplate模擬form提交示例

    Spring使用RestTemplate模擬form提交示例

    本篇文章主要介紹了Spring使用RestTemplate模擬form提交示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-03-03
  • Java中的@RequiredArgsConstructor注解詳解

    Java中的@RequiredArgsConstructor注解詳解

    這篇文章主要介紹了Java中的@RequiredArgsConstructor注解詳解,@RequiredArgsConstructor是Lombok的一個注解,簡化了我們對@Autowired書寫,@RequiredArgsConstructor注解可以代替@Autowired注解,需要的朋友可以參考下
    2024-01-01
  • Java繪圖庫JFreeChart的使用教程

    Java繪圖庫JFreeChart的使用教程

    圖表是一種以簡單方式顯示信息的圖形,JFreeChart允許創(chuàng)建各種交互式和非交互式圖表,本文主要介紹了Java繪圖庫JFreeChart的使用教程,感興趣的可以了解一下
    2023-09-09
  • java中Date和Timestamp類型的相互轉(zhuǎn)換方式

    java中Date和Timestamp類型的相互轉(zhuǎn)換方式

    這篇文章主要介紹了java中Date和Timestamp類型的相互轉(zhuǎn)換方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • java中l(wèi)ambda(函數(shù)式編程)一行解決foreach循環(huán)問題

    java中l(wèi)ambda(函數(shù)式編程)一行解決foreach循環(huán)問題

    這篇文章主要介紹了java中l(wèi)ambda(函數(shù)式編程)一行解決foreach循環(huán)問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • WebService教程詳解(二)

    WebService教程詳解(二)

    這篇文章主要介紹了WebService教程詳解(二) 的相關(guān)資料,需要的朋友可以參考下
    2016-03-03

最新評論

兴仁县| 富宁县| 罗平县| 大洼县| 乐业县| 友谊县| 松滋市| 江油市| 林周县| 开原市| 嘉兴市| 当涂县| 罗山县| 扶沟县| 平湖市| 九台市| 浠水县| 霍邱县| 介休市| 遵化市| 探索| 绍兴县| 娄烦县| 东乌| 乐至县| 砀山县| 达拉特旗| 伊春市| 高碑店市| 武安市| 班玛县| 长丰县| 本溪市| 新野县| 聂拉木县| 扶沟县| 廉江市| 印江| 浦东新区| 崇阳县| 盐津县|