返回顶部
首页 > 资讯 > 精选 >springboot2怎么禁用自带tomcat的session功能
  • 363
分享到

springboot2怎么禁用自带tomcat的session功能

2023-06-25 13:06:34 363人浏览 泡泡鱼
摘要

这篇文章主要介绍“SpringBoot2怎么禁用自带Tomcat的session功能”,在日常操作中,相信很多人在springboot2怎么禁用自带tomcat的session功能问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法

这篇文章主要介绍“SpringBoot2怎么禁用自带Tomcat的session功能”,在日常操作中,相信很多人在springboot2怎么禁用自带tomcat的session功能问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”springboot2怎么禁用自带tomcat的session功能”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

禁用自带tomcat的session功能

微服务下的各个服务都是无状态的,所以这个时候tomcat的session管理功能是多余的,即时不用,也会消耗性能,关闭后tomcat的性能会有提升,但是springboot提供的tomcat没有配置选项可以直接关闭,研究了一下,tomcat默认的session管理器名字叫:StandardManager,查看tomcat加载源码发现,如果context中没有Manager的时候,直接new StandardManager(),源码片段如下:

   Manager contextManager = null;                Manager manager = getManager();                if (manager == null) {                    if (log.isDebugEnabled()) {                        log.debug(sm.getString("standardContext.cluster.noManager",                                Boolean.valueOf((getCluster() != null)),                                Boolean.valueOf(distributable)));                    }                    if ((getCluster() != null) && distributable) {                        try {                            contextManager = getCluster().createManager(getName());                        } catch (Exception ex) {                            log.error(sm.getString("standardContext.cluster.managerError"), ex);                            ok = false;                        }                    } else {                        contextManager = new StandardManager();                    }                }                 // Configure default manager if none was specified                if (contextManager != null) {                    if (log.isDebugEnabled()) {                        log.debug(sm.getString("standardContext.manager",                                contextManager.getClass().getName()));                    }                    setManager(contextManager);                }

为了不让tomcat去new自己的管理器,必须让第二行的getManager()获取到对象,所以就可以从这里入手解决,我的解决办法如下:自定义一个tomcat工厂,继承原来的工厂,context中加入自己写的manager

@Componentpublic class TomcatServletWEBServerFactorySelf extends TomcatServletWebServerFactory {     protected void postProcessContext(Context context) {        context.setManager(new NoSessionManager());    }}
public class NoSessionManager extends ManagerBase implements Lifecycle {     @Override    protected synchronized void startInternal() throws LifecycleException {        super.startInternal();        try {            load();        } catch (Throwable t) {            ExceptionUtils.handleThrowable(t);            t.printStackTrace();        }        setState(LifecycleState.STARTING);    }     @Override    protected synchronized void stopInternal() throws LifecycleException {        setState(LifecycleState.STOPPING);        try {            unload();        } catch (Throwable t) {            ExceptionUtils.handleThrowable(t);            t.printStackTrace();        }        super.stopInternal();    }     @Override    public void load() throws ClassNotFoundException, IOException {        log.info("httpsession 已经关闭,若开启请配置:seeyon.tomcat.disableSession=false");    }     @Override    public void unload() throws IOException {}    @Override    public Session createSession(String sessionId) {        return null;    }     @Override    public Session createEmptySession() {        return null;    }     @Override    public void add(Session session) {}    @Override    public Session findSession(String id) throws IOException {        return null;    }    @Override    public Session[] findSessions(){        return null;    }    @Override    public void processExpires() {}}

两个类解决问题,这样通过request获取session就是空了,tomcat摆脱session这层处理性能有所提升。

禁用内置Tomcat的不安全请求方法

起因:安全组针对接口测试提出的要求,需要关闭不安全的请求方法,例如put、delete等方法,防止服务端资源被恶意篡改。

用过springMVC都知道可以使用@PostMapping、@GetMapping等这种注解限定单个接口方法类型,或者是在@RequestMapping中指定method属性。这种方式比较麻烦,那么有没有比较通用的方法,通过查阅相关资料,答案是肯定的。

tomcat传统形式通过配置web.xml达到禁止不安全的Http方法

<security-constraint>         <web-resource-collection>            <url-pattern>/*</url-pattern>            <http-method>PUT</http-method>         <http-method>DELETE</http-method>         <http-method>HEAD</http-method>         <http-method>OPTIONS</http-method>         <http-method>TRACE</http-method>         </web-resource-collection>         <auth-constraint>         </auth-constraint>      </security-constraint>      <login-config>        <auth-method>BASIC</auth-method>      </login-config>

Spring Boot使用内置tomcat,2.0版本以前使用如下形式

@Bean  public EmbeddedServletContainerFactory servletContainer() {      TomcatEmbeddedServletContainerFactory tomcat = new TomcatEmbeddedServletContainerFactory() {// 1          protected void postProcessContext(Context context) {              SecurityConstraint securityConstraint = new SecurityConstraint();              securityConstraint.setUserConstraint("CONFIDENTIAL");              SecurityCollection collection = new SecurityCollection();              collection.addPattern("/*");              collection.addMethod("HEAD");              collection.addMethod("PUT");              collection.addMethod("DELETE");              collection.addMethod("OPTIONS");              collection.addMethod("TRACE");              collection.addMethod("COPY");              collection.addMethod("SEARCH");              collection.addMethod("PROPFIND");              securityConstraint.addCollection(collection);              context.addConstraint(securityConstraint);          }      };

0版本使用以下形式

@Beanpublic ConfigurableServletWebServerFactory configurableServletWebServerFactory() {    TomcatServletWebServerFactory factory = new TomcatServletWebServerFactory();    factory.addContextCustomizers(context -> {        SecurityConstraint securityConstraint = new SecurityConstraint();        securityConstraint.setUserConstraint("CONFIDENTIAL");        SecurityCollection collection = new SecurityCollection();        collection.addPattern("/*");        collection.addMethod("HEAD");        collection.addMethod("PUT");        collection.addMethod("DELETE");        collection.addMethod("OPTIONS");        collection.addMethod("TRACE");        collection.addMethod("COPY");        collection.addMethod("SEARCH");        collection.addMethod("PROPFIND");        securityConstraint.addCollection(collection);        context.addConstraint(securityConstraint);    });    return factory;}

到此,关于“springboot2怎么禁用自带tomcat的session功能”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

--结束END--

本文标题: springboot2怎么禁用自带tomcat的session功能

本文链接: https://lsjlt.com/news/305196.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • springboot2怎么禁用自带tomcat的session功能
    这篇文章主要介绍“springboot2怎么禁用自带tomcat的session功能”,在日常操作中,相信很多人在springboot2怎么禁用自带tomcat的session功能问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法...
    99+
    2023-06-25
  • springboot2如何禁用自带tomcat的session功能
    目录禁用自带tomcat的session功能禁用内置Tomcat的不安全请求方法禁用自带tomcat的session功能 微服务下的各个服务都是无状态的,所以这个时候tomcat的s...
    99+
    2024-04-02
  • SpringBoot2的profile功能是什么与怎么自定义starter
    本篇内容主要讲解“SpringBoot2的profile功能是什么与怎么自定义starter”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“SpringBoot2的profile功能是什么与怎么自...
    99+
    2023-06-29
  • python自带help功能怎么使用
    这篇“python自带help功能怎么使用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“python自带help功能怎么使用...
    99+
    2023-07-05
  • win10怎么禁用自带键盘
    要禁用Windows 10的自带键盘,您可以按照以下步骤进行操作:1. 打开“设置”应用程序。您可以通过点击“开始”菜单,然后点击设...
    99+
    2023-09-01
    win10
  • windows自带录屏功能怎么使用
    Windows自带的录屏功能是通过“Xbox Game Bar”实现的,以下是使用步骤:1. 打开你想要录制的应用或游戏。2. 同时...
    99+
    2023-09-11
    windows
  • Win8怎么用自带的GeoLocation地理定位功能?
    现在很多手机应用都有地理定位功能,能够准确定位,搜索目的地。其实在Win8系统中也有地理定位功能,叫做GeoLocation。相 操作步骤: 1、 使用组合热键“Win+X”调出快捷菜单,点击并打...
    99+
    2023-05-20
    Win8 GeoLocation
  • win10自带格式转换功能怎么使用
    在Windows 10中,自带了一款名为“媒体功能包”的应用程序,其中包含了格式转换的功能。您可以按照以下步骤使用它:1. 打开“媒...
    99+
    2023-09-07
    win10
  • 怎么使用redis实现session功能
    这篇文章主要介绍怎么使用redis实现session功能,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!我们来简单介绍下redis。Redis(Remote Dictionary Se...
    99+
    2024-04-02
  • 怎么使用C语言自带的初始化功能
    C语言并没有内置的初始化功能,但可以通过以下方式实现变量的初始化: 静态初始化:在定义变量时直接赋予初始值。例如: int a ...
    99+
    2024-04-02
  • win10怎么禁用笔记本自带键盘
    要禁用笔记本自带键盘,可以按照以下步骤进行操作:1. 打开计算机的“设备管理器”。- 可以通过按下Win + X键,然后选择“设备管...
    99+
    2023-09-12
    win10
  • win10怎么关闭自带杀毒功能
    本篇内容主要讲解“win10怎么关闭自带杀毒功能”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“win10怎么关闭自带杀毒功能”吧!关闭方法:win+R打开运行,然后输入gpedit.msc,点击...
    99+
    2023-06-28
  • 怎么禁用ssl重协商功能
    禁用ssl重协商功能的方法:登录需要禁用ssl重协商功能的服务器。使用快捷键win+r,输入“secpol.msc”运行启动本地策略,再点“IP安全策略”。禁止443端口以及删除相关配置信息即可。...
    99+
    2024-04-02
  • Win8.1系统自带的“定位设置”功能怎么使用?
    Windows8.1系统自带“定位设置”功能,如果启用了定位设置功能,我们计算机的Windows系统就会定期将GPS(全球定位系统)和其他位置信息发送到Microsoft,这就难免泄...
    99+
    2022-06-04
    系统自带 功能
  • win7怎么禁止窗口自动最大化功能
    这篇“win7怎么禁止窗口自动最大化功能”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“win7怎么禁止窗口自动最大化功能”文...
    99+
    2023-06-28
  • win7系统Excel自带修复功能怎么用?win7使用Excel的修复功能方法
    办公族用户常需使用Excel软件,编辑或保存数据资料,但在win7纯净版系统打开或使用Excel文件中难免会遇到文件损坏的问题,如果Excel文件中有重要数据,那么这时候该怎么办呢?Excel拥有人性化的设计,为避免发生...
    99+
    2023-05-20
    win7 Excel 修复
  • Win8.1自带分区功能的使用方法 win8.1使用自带分区功能如何进行分区
    大家是否知道Win8.1自带分区功能,那么Win8.1自带分区功能如何使用?安装win8.1正式版系统后需要进行分区,可能很多用户第一反应就是下载分区功能。其实win8.1系统自带有分区功能,完全可以使用自...
    99+
    2022-06-04
    分区 自带 功能
  • wordpress自带的缓存功能使用介绍
    用静态化当然可以解决这些问题,不过对于流量不大的博客就没必要了。 wordpress自带有缓存体系,关键的函数你可以在wp-includes/cache.php或 Codex里查找到所有的函数。 你可以使用下列函数来实现...
    99+
    2022-06-12
    wordpress缓存 wp_cache
  • 怎么使用win10自带功能修复0字节u盘
    本篇内容介绍了“怎么使用win10自带功能修复0字节u盘”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!登录win10系统桌面,右键开始菜单,...
    99+
    2023-06-28
  • 怎么使用Java自带的mail API实现邮件发送功能
    本篇内容主要讲解“怎么使用Java自带的mail API实现邮件发送功能”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么使用Java自带的mail API实现邮件发送功能”...
    99+
    2023-07-05
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作