首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Spring boot - J2EE Bad Practices:存储在会话中的不可序列化对象

Spring Boot是一个开发框架,用于快速构建基于Java的企业级应用程序。它提供了一套强大的工具和库,简化了J2EE开发的复杂性。而J2EE Bad Practices是指在J2EE开发中常见的不良实践。

关于存储在会话中的不可序列化对象,不可序列化对象是指没有实现Serializable接口的对象。在Spring Boot中,将不可序列化对象存储在会话中是一个不良的实践。

会话是用于存储用户状态和数据的一种机制。通常情况下,会话数据会被序列化并存储在服务器的内存或持久化存储中。如果尝试存储一个不可序列化的对象,会引发异常,导致会话功能无法正常工作。

不可序列化的对象无法通过默认的Java序列化机制进行序列化和反序列化。而Spring Boot的会话功能依赖于Java的默认序列化机制。因此,当不可序列化对象被存储在会话中时,可能会导致程序出现异常或崩溃。

为了避免存储不可序列化对象在会话中的问题,可以采取以下几种做法:

  1. 序列化对象:将需要存储在会话中的对象实现Serializable接口。通过实现Serializable接口,对象可以被序列化和反序列化,从而可以正确地在会话中存储和恢复。
  2. 避免存储不可序列化对象:尽量避免将不可序列化的对象存储在会话中。可以考虑将需要存储的数据提取出来,只存储可序列化的数据,或者采用其他方式进行数据存储,如数据库或缓存。
  3. 使用其他会话管理方式:如果需要存储大量的不可序列化对象,并且必须使用会话管理功能,可以考虑使用其他会话管理方式。例如,可以使用分布式会话管理框架,如Spring Session,将会话数据存储在Redis等外部存储中。

总结起来,存储在会话中的不可序列化对象是一个J2EE开发的不良实践。为了避免此问题,可以通过实现Serializable接口、避免存储不可序列化对象或使用其他会话管理方式来解决。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

JWTSpring Boot最佳实践:构建坚不可安全堡垒

前言大家好,我是腾讯云开发者社区 Front_Yue,本篇文章将介绍什么是JWT以及JWTSpring Boot项目中最佳实践。现今Web应用,安全性是至关重要。...JSON Web Token(JWT)是一种开放标准(RFC 7519),它定义了一种紧凑、自包含方式,用于作为JSON对象各方之间安全地传输信息。...Spring Boot应用,JWT经常被用作无状态认证方式,使得客户端可以每次请求时都带上JWT,从而进行身份验证。...二、Spring Boot中使用JWTSpring Boot,你可以通过以下步骤集成JWT:1....总结使用JWT进行用户认证和授权提供了灵活性和可扩展性,使得前后端分离应用更容易管理用户会话。通过正确配置JWT工具类,我们可以轻松地Spring Boot应用实现JWT认证。

87232

Spring全家桶之SpringSession「建议收藏」

使用 安装Redis单机版 共享简单数据 共享自定义对象 SpringSession Redis 存储结构 设置session失效时间 @EnableRedisHttpSession注解相关属性讲解...注解相关属性讲解 更换 SpringSession 序列化器 第一章 HttpSession 一、 HttpSession 回顾 什么是 HttpSession 是 JavaWeb 服务端提供用来建立与客户端会话状态对象...更换 SpringSession 序列化器 SpringSession 默认序列化器为 jdk 序列化器,该序列化器效率低下,内存再用大。...Spring Session MongoDB 提供了一个API 和实现,用于通过利用Spring Data MongoDB来管理存储MongoDB 用户会话信息。..., 而自定义对象属性不在白名单,我们需要关闭属性自动校验。

2K30

补习系列(15)-springboot 分布式会话原理

对于服务器而言,Session 通常是存储本地,比如Tomcat 默认将Session 存储在内存(ConcurrentHashMap)。...那么,这对现有的会话session 管理带来了麻烦,当一个带有会话表示Http请求到Web服务器后,需求在请求处理过程中找到session数据, 而 session数据是存储本地, 假设我们有应用...序列化 接下来,继续尝试查看 Redis 所存储会话数据 127.0.0.1:6379> hgetall "spring:session:app:sessions:8aff1144-a1bb-4474...spring-session 通过过滤器实现 HttpServletRequest 代理; 代理对象调用会话管理器进一步进行Session操作。 这是一个代理模式巧妙应用! C....: 写入会话时设置超时时间,并将该会话记录到时间槽形式超时记录集合; 启用定时器,定时清理属于当前时间槽会话数据。

61220

经典笔试篇-EJB及Spring

对于客户机,SessionBean 是一种非持久性对象,它实现某些服务器上运行业务逻辑。...对于客户机,EntityBean 是一种持久性对象,它代表一个存储持久性存储实体对象视图,或是一个由现有企业应用程序实现实体。...EJB 实例业务方法时,如果对应EJB Object发现自己没有绑定对应Bean 实例则从其去激活Bean 存储(通过序列化机制存储实例)回复(激活)此实例。...该容器提供接口严格遵守J2EE 规范WEB APPLICATION 标准。...177、请写出spring I0C 三种实现机制。【中等难度】 答:三种机制为:通过setter 方法注入、通过构造方法注入和接口注入。 178、写出你熟悉开源框架以及各自作用。

1.3K20

Java面试之EJB & Spring

对于客户机,SessionBean 是一种非持久性对象,它实现某些服务器上运行业务逻辑。...对于客户机,EntityBean 是一种持久性对象,它代表一个存储持久性存储实体对象视图,或是一个由现有企业应用程序实现实体。...EJB 实例业务方法时,如果对应EJB Object发现自己没有绑定对应Bean 实例则从其去激活Bean 存储(通过序列化机制存储实例)回复(激活)此实例。...该容器提供接口严格遵守J2EE 规范WEB APPLICATION 标准。...16、请写出spring I0C 三种实现机制。【中等难度】 答:三种机制为:通过setter 方法注入、通过构造方法注入和接口注入。 17、写出你熟悉开源框架以及各自作用。

45730

Spring技术内幕:设计理念和整体架构概述

一方面,他们有深厚技术基础,对应用技术知其所以然,另一方面,采坑过程不断总结,积累了很多经验。...spring-expression模块提供了一个强大表达式语言用来在运行时查询和操作对象图,这种语言支持对属性值、属性参数、方法调用、数组内容存储、集合和索引、逻辑和算数操作及命名变量,并且通过名称从...spring控制反转容器取回对象。...Spring Cloud 为分布式系统开发提供工具集,基于Spring Boot,为基于JVM云应用开发配置管理、服务发现、断路器、智能路由、控制总线、全局锁、决策竞选、分布式会话、集群状态管理等操作提供了一种简单开发方式...,通过Spring Data,开发者可以用Spring提供相对一致方式访问位于不同类型数据存储数据。

1.9K30

Spring Boot框架讲解教程-动力节点王鹤

Spring Boot 框架快速入门教程以大量示例讲解了 Spring Boot 各类情境应用,让大家可以跟着老师思维和代码快速理解并掌握。...适用于 Java 开发人员,尤其是初学 Spring Boot 的人员和需要从传统 Spring 转向 Spring Boot 开发技术人员。...Spring Boot简介 Spring 诞生时是 Java 企业版(Java Enterprise Edition,JEE,也称 J2EE 轻量级代替品。...Spring BootSpring平台及第三方库提供开箱即用设置(提供默认设置),这样我们就可以简单开始。多数Spring Boot应用只需要很少Spring配置。...java对象 •024.SpringBoot使用jsp步骤 •025.创建使用jsp项目 •026.测试jsp使用 •027.手工获取容器对象 •028.使用CommandLineRunner

48620

帅气 Spring Session 功能,基于 Redis 实现分布式会话,还可以整合 Spring Security!

,获得读写外部存储 SessionWrapper 对象。...万分好奇,Spring Session 会把 Session 如何存储 MongoDB ,所以就有了本小节入门。...序列化 Redis key-value 键值对成 Session 时,如果 attributes value 存在 POJO 对象时候,因为不知道该 value 是什么 POJO 对象,导致无法反序列化错误...目前,艿艿暂时找不到特别合适解决方案,所以就换回 Java 序列化方式。也因此,使用 Spring Session 时,先老实使用 Java 序列化方式吧。...用户 PC 浏览器上,添加商品到购物车,我们选择将该信息存储到 Session 。那么,如果此时用户微信小程序打开购物车,是看不到这个商品

6.2K20

5 本最佳 Java 面向对象理论和设计模式书籍

最初几年开发,我往往根据需求来编写代码,然而在更多改动,更多测试之后,往往引入更多bug。多亏了我好学精神,我了发现Head First Design Pattern。...这是这个主题又一本书,它不仅涵盖了所有的面向对象基础(类,对象,继承,多态,抽象,封装),也包括了一些实用但不明显细节,譬如私有方法,getter和setter方法,不可对象,接口和监视器(monitor...Core J2EE Patterns: Best Practices and Design Strategies (2nd Edition) by Deepak Alur, Dan Malks, and...虽然现代框架如Spring已经确保你框架层次接触到这些J2EE设计模式,譬如Spring MVC确保了MVC使用,它也同时使用了前端控制器(DipatcherServlet)和视图解析器(ViewResolver...总之,不管你使用Spring MVC, Structs还是其他web框架,学习J2EE模式不仅能帮助你理解前人写代码,也能让你写出更容易维护代码。

1.8K40

从故纸堆里,回顾下Web技术发展历程

第一部分(第1~9章)主要讲述Spring Boot相关技能,包括搭建Spring Boot开发环境、Spring Boot框架基础、JPA操作数据库、面向切面编程、基于Thymeleaf和FreeMarker...和MyBatis 框架易于理解版本,深入剖析了其中各个模块实现,从代码挖掘常用设计模式,为读者理解Spring 系列框架可扩展设计艺术提供了方法论和优秀实践。...MyBatis 源码剖析篇基于MyBatis 3.4 版本,帮助读者对SQL 语言、JDBC 及数据访问方式有更深入了解,也能看到工厂、Builder、代理、装饰者等设计模式MyBatis 大量应用...我也找到了在这之前Web框架书,是 J2EE,叫J2EE全实例教程,是03年出,估计那个时候不少看这篇文章朋友还在上小学,那个时候哪怕是最大90后,也才在读初中。  ...,应该是现在分布式组件老祖宗  J2EE之前,就是ASP之类技术,我也买了本旧书,这个是1999年出版,上个世纪书了,比所有的00后年纪还大。

32720

ActiveMQ使用入门

但这些远程调用是同步操作不可避免存在一些局限: (1)同步阻塞:客户对象发出调用后,必须等待服务对象完成处理并返回结果才能继续 执行; (2)紧密耦合:客户进程和服务对象进行都必须正常运行,服务对象崩溃会导致客户...5 使用 Spring Boot 简化JMS开发 5.1 发送字符串消息 (1)创建 spring boot 项目,引入 spring-boot-starter-activemq  (2) application.yml...配置 activemq 连接 (3)Spring配置类创建Destination(消息目的地)——Queue(队列)  (4)使用“JmsMessagingTemplate”实现消息生产者...5.2 发送对象消息 使用JmsMessagingTemplate还可从生产者向消费者以发送对象对象实际上会被序列化 到消息队列。...作为消息发送对象需要:  (1)设置为可序列化 (2)修改application.yml,配置需要传输类为信任对象  (3)定义消息队列 (4)消息生产者  (5)消息消费者  6 使用ActiveMQ

1.8K50

你有没有掉进去过这些Spring MVC“陷阱“(上)

已经框架定义好了这些响应码,不需要在编写业务代码时再去定义响应码,当然Spring MVC也支持自定义状态码 需要自定义返回状态码场景有以下几种 针对不容错误类型发送特定错误码 客户端定制化需求...响应头为设置400,即BAD_REQUEST枚举值。...http://localhost:8080/tesla/fourth Accept: application/json 点击发送该请求 二、时间序列化和反序列化“陷阱” 新增一个entity包,...使用JsonFormat注解 UserInfo实体类createTime属性增加注解 @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss", timezone = "...类重写handleType()方法,指定针对所有Date类型属性进行反序列化 @Override public Class<?

83110

django 1.8 官方文档翻译: 13-9-1 如何使用会话

虽然这很方便,但是某些架构存储会话在其它地方会更快,所以可以配置Django 来存储会话到你文件系统上或缓存。...django.contrib.auth.login() 调用这个方法来减缓会话固定。 会话序列化 1.6 版以前,保存会话数据到后端之前Django 默认使用pickle 来序列化它们。...如果你希望JSON 格式会话存储更高级数据类型比如datetime 和 Decimal,你需要编写一个自定义序列化器(或者保存它们到request.session之前转换这些值到一个可JSON...序列化对象)。...如果该攻击者具有bad.example.com控制权,那么他可以使用这个域名来发送他会话ID给你,因为子域名允许*.example.com上设置Cookie。

1.2K20
领券