(每日持续更新)jdk api之ObjectInputFilter.Status基础、应用、实战

博主18年的互联网软件开发经验,从一名程序员小白逐步成为了一名架构师,我想通过平台将经验分享给大家,因此博主每天会在各个大牛网站点赞量超高的博客等寻找该技术栈的资料结合自己的经验,晚上进行用心精简、整理、总结、定稿,每天都会整理到12点,为了就是能让大家能够真正了解该技术栈的真正原理,最终从程序员成为一名真正的架构师,写的不一定是全站做好的,但是是全站最用心的~。

以后我会推出一些列的文章,每天都会更新,每天进步一点点,发布顺序【java的api基础、应用、实战】->【java开源技术栈及源码分析】->【java开源技术栈整合】->【java低代码开发平台的建设】

关注【架构师成长之道】 输入“架构师视频课程”,即可免费获得全套架构师全套课程

一、java.io

1.43 ObjectInputFilter.Status

在Java中,ObjectInputFilter.Status枚举表示对象输入过滤器中的检查结果状态。以下是关于ObjectInputFilter.Status的基本介绍:

ObjectInputFilter.Status 介绍:
所有字段:
  • ALLOWED 表示允许进行当前的反序列化操作。

  • REJECTED 表示拒绝进行当前的反序列化操作。

构造方法:
  • private Status() {}ObjectInputFilter.Status枚举类的构造方法为私有,不能被实例化。

方法摘要:
  • valueOf(String name) 返回带有指定名称的枚举常量。

  • values() 返回枚举类型的常量数组。

简单使用例子:
javaCopy code
public class ObjectInputFilterExample {
​public static void main(String[] args) {// 使用枚举常量ObjectInputFilter.Status status = ObjectInputFilter.Status.ALLOWED;System.out.println("Status: " + status);
​// 使用valueOf()方法获取枚举常量ObjectInputFilter.Status status1 = ObjectInputFilter.Status.valueOf("ALLOWED");System.out.println("Status 1: " + status1);
​// 使用values()方法获取所有枚举常量ObjectInputFilter.Status[] statuses = ObjectInputFilter.Status.values();System.out.println("All Statuses:");for (ObjectInputFilter.Status s : statuses) {System.out.println(s);}}
}

在这个简单的例子中,我们展示了如何使用ObjectInputFilter.Status枚举。我们创建了一个枚举常量ALLOWED并打印了其值。然后,我们使用valueOf()方法根据枚举常量的名称获取枚举常量,并使用values()方法获取所有枚举常量。

应用例子

ObjectInputFilter.Status枚举通常用于在对象输入过滤器中指示当前反序列化操作的状态。以下是一些可能的应用场景和相应的代码实现示例:

应用场景 1: 根据状态执行不同的操作
javaCopy code
import java.io.*;
​
public class StatusUsageExample {
​public static void main(String[] args) {try {// 模拟检查反序列化对象的状态ObjectInputFilter.Status status = getStatusFromExternalSource();
​// 根据状态执行不同的操作switch (status) {case ALLOWED:// 允许进行当前的反序列化操作performDeserialization();break;case REJECTED:// 拒绝进行当前的反序列化操作handleRejectedDeserialization();break;default:// 处理其他状态handleUnknownStatus();}} catch (IOException | ClassNotFoundException e) {e.printStackTrace();}}
​private static ObjectInputFilter.Status getStatusFromExternalSource() {// 从外部获取反序列化对象的状态,这里简单地返回一个模拟的状态return Math.random() < 0.5 ? ObjectInputFilter.Status.ALLOWED : ObjectInputFilter.Status.REJECTED;}
​private static void performDeserialization() throws IOException, ClassNotFoundException {// 在此执行允许的反序列化操作System.out.println("Performing deserialization...");try (ObjectInputStream inputStream = new ObjectInputStream(new FileInputStream("data.ser"))) {Object object = inputStream.readObject();System.out.println("Deserialized object: " + object);}}
​private static void handleRejectedDeserialization() {// 在此处理被拒绝的反序列化操作System.out.println("Handling rejected deserialization...");System.out.println("Access to deserialization is denied.");}
​private static void handleUnknownStatus() {// 在此处理未知的状态System.out.println("Unknown status. Cannot proceed with deserialization.");}
}
应用场景 2: 在自定义的对象输入过滤器中使用
javaCopy code
import java.io.*;
​
public class CustomObjectInputFilterUsage {
​public static void main(String[] args) {try {// 设置自定义的对象输入过滤器ObjectInputFilter filter = new MyObjectInputFilter();ObjectInputFilter.Config.setSerialFilter(filter);
​// 模拟反序列化操作performDeserialization();} catch (IOException | ClassNotFoundException e) {e.printStackTrace();}}
​private static void performDeserialization() throws IOException, ClassNotFoundException {// 在此执行允许的反序列化操作System.out.println("Performing deserialization...");try (ObjectInputStream inputStream = new ObjectInputStream(new FileInputStream("data.ser"))) {Object object = inputStream.readObject();System.out.println("Deserialized object: " + object);}}
​static class MyObjectInputFilter implements ObjectInputFilter {private static final long serialVersionUID = 1L;
​@Overridepublic Status checkInput(FilterInfo filterInfo) {// 模拟根据某些条件检查反序列化操作的状态if (filterInfo.serialClass().getName().equals("MyClass")) {// 允许特定类的反序列化操作return Status.ALLOWED;} else {// 拒绝其他类的反序列化操作return Status.REJECTED;}}}
}

以上示例展示了如何在不同场景下使用ObjectInputFilter.Status枚举。在第一个示例中,我们根据状态执行不同的操作,以模拟根据状态来决定应该如何处理反序列化操作。在第二个示例中,我们定义了一个自定义的对象输入过滤器,并在其中使用了ObjectInputFilter.Status来指示允许或拒绝反序列化操作。

实战例子

以下是一个项目实战的例子,涉及使用ObjectInputFilter.Status来设置全局的对象输入过滤器,以确保只有受信任的类可以被反序列化。

javaCopy code
import java.io.*;
​
public class SecureDeserializationProject {
​public static void main(String[] args) {// 保存数据到文件saveDataToFile("data.ser");
​// 从文件加载数据并进行反序列化loadDataFromFile("data.ser");}
​private static void saveDataToFile(String fileName) {try (ObjectOutputStream outputStream = new ObjectOutputStream(new FileOutputStream(fileName))) {// 创建一个可信的类对象并保存到文件TrustedClass trustedObject = new TrustedClass("Important data");outputStream.writeObject(trustedObject);System.out.println("Trusted object saved to file successfully.");} catch (IOException e) {e.printStackTrace();}}
​private static void loadDataFromFile(String fileName) {try (ObjectInputStream inputStream = new ObjectInputStream(new FileInputStream(fileName))) {// 设置全局对象输入过滤器,仅允许反序列化 TrustedClass 类ObjectInputFilter filter = TrustedObjectInputFilter.create();ObjectInputFilter.Config.setSerialFilter(filter);
​// 读取并反序列化对象Object object = inputStream.readObject();if (object instanceof TrustedClass) {TrustedClass trustedObject = (TrustedClass) object;System.out.println("Loaded trusted object: " + trustedObject.getData());}} catch (IOException | ClassNotFoundException e) {e.printStackTrace();}}
​static class TrustedClass implements Serializable {private static final long serialVersionUID = 1L;private String data;
​public TrustedClass(String data) {this.data = data;}
​public String getData() {return data;}}
​static class TrustedObjectInputFilter implements ObjectInputFilter {private static final long serialVersionUID = 1L;
​// 创建自定义过滤器public static ObjectInputFilter create() {return new TrustedObjectInputFilter();}
​@Overridepublic Status checkInput(FilterInfo filterInfo) {// 仅允许反序列化 TrustedClass 类if ("TrustedClass".equals(filterInfo.serialClass().getName())) {return Status.ALLOWED;}// 其他类都拒绝return Status.REJECTED;}}
}

在这个示例中,我们创建了一个TrustedClass类作为受信任的类,并将其保存到文件中。然后,我们设置了一个全局的对象输入过滤器,仅允许反序列化TrustedClass类,以确保只有受信任的类可以被反序列化。通过使用ObjectInputFilter.Status和自定义的ObjectInputFilter,我们可以提高系统的安全性,防止反序列化不受信任的类。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/674822.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

计算机网络基本知识(二)

文章目录 概要分层为什么分层怎么分层&#xff1f;1.实体2.协议3.服务 分层基本原则正式认识分层详细例子解释 总结 概要 分层知识&#xff1a;概念理解 分层 为什么分层 大致以上五点 为了解决上面的问题&#xff08;复杂&#xff09; 大问题划分为小问题 怎么分层&#…

代码随想录算法训练营第十五天|102.二叉树的层序遍历、226.翻转二叉树

102.二叉树的层序遍历 刷题https://leetcode.cn/problems/binary-tree-level-order-traversal/description/文章讲解https://programmercarl.com/0102.%E4%BA%8C%E5%8F%89%E6%A0%91%E7%9A%84%E5%B1%82%E5%BA%8F%E9%81%8D%E5%8E%86.html视频讲解https://www.bilibili.com/video…

【前端素材】bootstrap4实现绿色植物Lukani平台

一、需求分析 绿色植物商城是一个专门销售绿色植物的零售商店或在线平台。它提供各种类型和品种的室内植物、室外植物和盆栽等。绿色植物商城的作用可以从以下几个方面来分析&#xff1a; 1. 提供多样化的选择&#xff1a;绿色植物商城通常会提供各种各样的绿色植物选项&…

网络安全产品之认识准入控制系统

文章目录 一、什么是准入控制系统二、准入控制系统的主要功能1. 接入设备的身份认证2. 接入设备的安全性检查 三、准入控制系统的工作原理四、准入控制系统的特点五、准入控制系统的部署方式1. 网关模式2. 控制旁路模式 六、准入控制系统的应用场景七、企业如何利用准入控制系统…

分布式系统架构介绍

1、为什么需要分布式架构&#xff1f; 增大系统容量&#xff1a;单台系统的性能瓶颈&#xff0c;多台机器才能应对大规模的应用场景&#xff0c;所以就需要我们的应用支撑平台具备分布式架构。 加强系统的可用&#xff1a;为了满足业务的SLA要求&#xff0c;需要通过分布式架构…

表单标记(html)

前言 发现input的type属性还是有挺多的&#xff0c;这里把一些常用的总结一下。 HTML 输入类型 (w3school.com.cn)https://www.w3school.com.cn/html/html_form_input_types.asp text-文本 文本输入,如果文字太长&#xff0c;超出的部分就不会显示。 定义供文本输入的单行…

Stability AI一种新型随心所欲生成不同音调、口音、语气的文本到语音(TTS)音频模型

该模型无需提前录制人声样本作为参考&#xff0c;仅凭文字描述就能生成所需的声音特征。用户只需描述他们想要的声音特点&#xff0c;例如“一个语速较快、带有英国口音的女声”&#xff0c;模型即可相应地生成符合要求的语音。它不仅能模仿已有的声音&#xff0c;还能根据用户…

Mac使用AccessClient打开Linux堡垒机跳转闪退问题解决

登录公司的服务器需要使用到堡垒机&#xff0c;但是mac使用AccessClient登录会出现问题 最基础的AccessClient配置 AccessClient启动需要设置目录权限&#xff0c;可以直接设置为 权限 777 chmod 777 /Applications/AccessClient.app注: 如果不是这个路径,可以打开终端,将访达中…

OJ刷题:求俩个数组的交集(没学哈希表?快排双指针轻松搞定!)

目录 ​编辑 1.题目描述 2.C语言中的内置排序函数&#xff08;qsort&#xff09; 3.解题思路 3.1 升序 3.2双指针的移动 3.3 保证加入元素的唯一性 4.leetcode上的完整代码 完结散花 悟已往之不谏&#xff0c;知来者犹可追 …

新增C++max函数的使用

在 C 中&#xff0c;max函数是标准库中的一个函数&#xff0c;用于返回两个或多个元素中的最大值。max函数的声明如下&#xff1a; cpp #include <algorithm>template<class T> const T& max(const T& a, const T& b);这个函数接受两个同类型的参数a…

UML 2.5图形库

UML 2.5图形库 drawio是一款强大的图表绘制软件&#xff0c;支持在线云端版本以及windows, macOS, linux安装版。 如果想在线直接使用&#xff0c;则直接输入网址drawon.cn或者使用drawon(桌案), drawon.cn内部完整的集成了drawio的所有功能&#xff0c;并实现了云端存储&#…

UnityShader:直接光照效果/点光/平行光阴影

效果&#xff1a; 代码&#xff1a; Shader "MyShader/PhongNormal" {Properties{_DiffuseTex("漫反射贴图",2d)"white"{}_AOTex("AO贴图",2d)"white"{}_SpecularMask("高光遮罩",2d)"white"{}_Normal…

大模型实战营第二期——2. 浦语大模型趣味Demo

文章目录 1. 大模型及InternLM模型介绍2. InternLM-Chat-7B智能对话Demo2.1 基本说明2.2 实际操作2.2.1 创建开发机2.2.2 conda环境配置2.2.3 模型下载2.2.4 InternLM代码库下载和修改2.2.5 cli运行2.2.6 web_demo运行 3. Lagent智能体工具调用Demo3.1 基本说明3.2 实际操作3.2…

商业智能(BI)数据分析、挖掘概念

商业智能&#xff08;BI&#xff09;数据分析挖掘概念 一、商业智能&#xff08;BI&#xff09;数据分析挖掘概念 数据挖掘目前在各类企业和机构中蓬勃发展。因此我们制作了一份此领域常见术语总结。 1.分析型客户关系管理&#xff08;Analytical CRM/aCRM 用于支持决策&…

nodeJS 的 npm 设置国内高速镜像之淘宝镜像的方法

1、我们知道 nodeJS 是老外搞出来的&#xff0c;服务器放在了国外&#xff0c;国内的小朋友访问起来会比较慢&#xff0c;阿里巴巴的淘宝给出了有力支持&#xff0c;现在我们就将 nodeJS 的镜像地址切换为国内的淘宝镜像。 2、查看当前的镜像地址&#xff1a; npm get registr…

数据库管理-第147期 最强Oracle监控EMCC深入使用-04(20240207)

数据库管理147期 2024-02-07 数据库管理-第147期 最强Oracle监控EMCC深入使用-04&#xff08;20240207&#xff09;1 发现Exadata2 Exadata监控计算节点&#xff1a;存储节点RoCE交换机管理交换机PDU 总结 数据库管理-第147期 最强Oracle监控EMCC深入使用-04&#xff08;202402…

JavaScript 入门 完整版

目录 第一个知识点&#xff1a;引入js文件 内部引用: 外部引用: 第二个知识点&#xff1a;javascript的基本语法 定义变量&#xff1a; 条件控制(if - else if - else) 第三个知识点&#xff1a;javascript里的数据类型、运算符&#xff1a; 数字类型 字符串类型 布尔…

用HTML5实现灯笼效果

本文介绍了两种实现效果&#xff1a;一种使用画布&#xff08;canvas&#xff09;标签/元素&#xff0c;另一种不用画布&#xff08;canvas&#xff09;标签/元素主要使用CSS实现。 使用画布&#xff08;canvas&#xff09;标签/元素实现&#xff0c;下面&#xff0c;在画布上…

机器学习 | 深入集成学习的精髓及实战技巧挑战

目录 xgboost算法简介 泰坦尼克号乘客生存预测(实操) lightGBM算法简介 《绝地求生》玩家排名预测(实操) xgboost算法简介 XGBoost全名叫极端梯度提升树&#xff0c;XGBoost是集成学习方法的王牌&#xff0c;在Kaggle数据挖掘比赛中&#xff0c;大部分获胜者用了XGBoost。…

【代码随想录26】332.重新安排行程 51.N皇后 37.解数独

目录 332.重新安排行程题目描述参考代码 51.N皇后题目描述参考代码 37.解数独题目描述参考代码 332.重新安排行程 题目描述 给你一份航线列表 tickets &#xff0c;其中 tickets[i] [fromi, toi] 表示飞机出发和降落的机场地点。请你对该行程进行重新规划排序。 所有这些机…