我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Springboot如何去掉URL后面的jsessionid

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Springboot如何去掉URL后面的jsessionid

如何去掉URL后面的jsessionid

url中有Jsessionid生成的原因

jsessionid是标明session的id,它存在于cookie中,一般情况不会出现在url中,服务器会从客户端的cookie中取出来,但是如果客户端禁用了cookie的话,就要重写url了,显式的将jsessionid重写到Url中,方便服务器来通过这个找到session的id。

如果客户端请求的cookie中不包含JSESSIONID,服务端调用request.getSession()时就会生成并传递给客户端,此次响应头会包含设置cookie的信息

如果客户端请求的cookie中包含JSESSIONID,服务端调用request.getSession()时就会根据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关于jsessionid和URL

在写JSP程序时,经常发现url中有一个jsessionid参数,在刷新之后就消失了。一些人认为这是个一个BUG。

这不是一个bug。当一个新的session被创建时,server并不确定客户端是否支持cookies,所以它生成了一个cookie,就是URL中jsessionid的值。当客户端在第二次带着cookie返回时,服务器就知道jsessionid不是必须的,所以就会删掉它。如果客户端没有带着cookie返回,服务器就会继续在url中添加jsessionid参数。

但是现在几乎很难想象浏览器会不支持cookie。jsessionid参数也可能会给SEO和安全带来一定问题。

对SEO的冲击

有些搜索引擎可能会惩罚(找不到更好的词形容)那些具有多个不同url但内容相同的网站。因为sessionid是唯一的,所以多个搜索机器人将返回相同的内容但url不同。

这是一个严重的问题。我们试一下用google搜索inurl:;jsessionid,Google的搜索结果: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.*;
 

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中添加以下内容:


<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>

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Springboot如何去掉URL后面的jsessionid

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Springboot怎么去掉URL后面的jsessionid

这篇文章主要介绍“Springboot怎么去掉URL后面的jsessionid”,在日常操作中,相信很多人在Springboot怎么去掉URL后面的jsessionid问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家
2023-06-25

php如何去掉url里的.php后缀

php去掉url里的.php后缀的方法:1、找到并打开apache下的“extra/httpd-vhosts.conf”文件;2、通过配置伪静态去掉php后缀即可。
2016-02-09

php如何将数值后面的零去掉

本篇内容主要讲解“php如何将数值后面的零去掉”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“php如何将数值后面的零去掉”吧!两种去除方法:1、使用rtrim()函数,语法“rtrim(数值,"
2023-06-30

php如何去掉后面几个字符串

这篇“php如何去掉后面几个字符串”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“php如何去掉后面几个字符串”文章吧。在PH
2023-07-06

php如何去掉某个字符后面的内容

这篇文章主要介绍“php如何去掉某个字符后面的内容”,在日常操作中,相信很多人在php如何去掉某个字符后面的内容问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”php如何去掉某个字符后面的内容”的疑惑有所帮助!
2023-06-30

Java如何去掉小数点后面无效0

今天小编给大家分享一下Java如何去掉小数点后面无效0的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。一:需求当小数位很多的时
2023-07-02

linux一窜数字后面的逗号该如何去掉

今天就跟大家聊聊有关linux一窜数字后面的逗号该如何去掉,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。在Linux系统中可以使用工具和代码两种方法将系统中的信息就行格式化,下面和大
2023-06-28

php如何去掉前后的逗号

今天小编给大家分享一下php如何去掉前后的逗号的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。去掉前后逗号的方法:1、用tri
2023-06-30

Vue如何用Router去掉url中默认的锚点

这篇文章主要介绍“Vue如何用Router去掉url中默认的锚点”,在日常操作中,相信很多人在Vue如何用Router去掉url中默认的锚点问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Vue如何用Route
2023-07-04

织梦dede如何去掉后台登陆界面广告

每天维护网站都得登陆后台,可是登陆后台看到的是很多广告,非常眼花看多了烦了,刚开始我都不管他,可是最近我又做了个织梦程序建的网站,这次不行了必须得去掉这些广告,于是我找了很多教程最后去掉了,下面我给大家分享下我的解决办法:看看织梦登陆界面广告,多烦啊 图中指明
织梦dede如何去掉后台登陆界面广告
2017-09-23

php如何去掉前面的字符

这篇文章主要讲解了“php如何去掉前面的字符”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“php如何去掉前面的字符”吧!方法一:使用substr()函数PHP中的substr()函数可以用来
2023-07-05

vue中如何去掉input前后的空格

这篇文章主要介绍了vue中如何去掉input前后的空格问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
2023-03-06

php如何去掉小数点后的内容

这篇文章主要介绍了php如何去掉小数点后的内容的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇php如何去掉小数点后的内容文章都会有所收获,下面我们一起来看看吧。一:使用number_format函数number
2023-07-05

如何去掉windows7桌面图标的蓝底

桌面图标有阴影怎么去掉?"“桌面图标有阴影怎么去掉?”经常被一些新手问这样的一个问题,有时候明明是同个问题,却要被同个人问上好几次,感觉确实挺无奈。人总是有好奇心的,新手童鞋们在使用计算机的过程中,总喜欢按着自己的意
2023-05-26

php中如何去掉数字前面的0

这篇文章给大家分享的是有关php中如何去掉数字前面的0的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。php去掉数字前面的0的方法:1、通过“str_replace ("0", "", $str);”方法去除数字前
2023-06-15

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录