JNDI注入原理及利用

前言本篇讲述了RMI-JNDI注入的利用原理,分析了利用流程;使用了marshalsec反序列化工具去简单的起一个RMI/LDAP服务端对于导致JNDI注入的漏洞代码扩展至com.sun.rowset.JdbcRowSetImpl函数,为fastjson反序列化起一个引子,准备新起一文。分析了jav

Java8 Stream

Java中的Stream可以定义为来自源的一系列元素,这些元素支持对它们的聚合操作。这里的源是指向流提供数据的Collection或Array。Stream保持数据在源中的顺序。该聚合操作或批量操作是操作这让我们很容易和清楚地表达对流元素共同操作。在继续之前,了解Java8Streams的设计方式使

关于Java性能的9个谬论

Java的性能有某种黑魔法之称。部分原因在于Java平台非常复杂,很多情况下问题难以定位。然而在历史上还有一种趋势,人们靠智慧和经验来研究Java性能,而不是靠应用统计和实证推理。在这篇文章中,我希望拆穿一些最荒谬的技术神话。 1.Java很慢 关于Java的性能有很多谬论,这一条是最过时的,可能也是最为明显的。 确实,在上世纪90年代和本世纪初处,Java有时是很慢。

推荐给初级Java程序员的3本进阶书

原作者在这篇文章中介绍3本不错的技术书籍。作者认为这些书籍对新手或者学生而言尤其有帮助。通过一些基础性的教程入门后,我们可以使用Java做基础性的编程。然而,当我们需要从初级提升更高的一个层次时,大多数的人却不知道从何入手。一些好的书籍在这个阶段可以很好地帮助初级开发人员。

Java深度历险(二)——Java类的加载、链接和初始化

在上一篇文章中介绍了Java字节代码的操纵,其中提到了利用Java类加载器来加载修改过后的字节代码并在JVM上执行。本文接着上一篇的话题,讨论Java类的加载、链接和初始化。Java字节代码的表现形式是字节数组(byte[]),而Java类在JVM中的表现形式是java.lang.Class类的对象。一个Java类从字节代码到能够在JVM中被使用,需要经过加载、链接和初始化这三个步骤。这三个步骤中

Java编程:常见问题汇总

该页面收集了一些不好的代码,对于初学者来说看起来似乎并不那么糟糕。初学者经常在语言语法上挣扎。他们对标准JDK类库以及如何最好地利用它也不了解。实际上,我已经从日常初级代码中收集了所有示例。我已经修改了原始代码,为它提供了示例字符,从而突出了问题所在。SonarQube可以很容易地发现许多这些问题。我强烈推荐此工具。

异常以及异常处理框架探析

摘要:本文主要与您探讨异常以及异常处理相关方面的一些知识,主要包括检查异常与非检查异常的理解,多视角观察理解异常,进而探讨关于构建稳健且可扩展的异常框架方面的一些设计原则。   概述   一般情况下,企业级应用都对应着复杂的业务逻辑,为了保证系统的健壮,必然需

Java深度历险(一)——Java字节代码的操纵

在一般的Java应用开发过程中,开发人员使用Java的方式比较简单。打开惯用的IDE,编写Java源代码,再利用IDE提供的功能直接运行Java 程序就可以了。这种开发模式背后的过程是:开发人员编写的是Java源代码文件(.java),IDE会负责调用Java的编译器把Java源代码编译成平台无关的字节代码(byte code),以类文件的形式保存在磁盘上(.class)。Java虚拟机(JVM)会负责把Java字节代码加载并执行。Java通过这种方式来实现其“编写一次,到处运行(Write once, run anywhere)” 的目标。Java类文件中包含的字节代码可以被不同平台上的JVM所使用。Java字节代码不仅可以以文件形式存在于磁盘上,也可以通过网络方式来下载,还可以只存在于内存中。JVM中的类加载器会负责从包含字节代码的字节数组(byte[])中定义出Java类。在某些情况下,可能会需要动态的生成 Java字节代码,或是对已有的Java字节代码进行修改。这个时候就需要用到本文中将要介绍的相关技术。首先介绍一下如何动态编译Java源文件。

Java程序员应该知道的10个面向对象理论

面向对象理论是面向对象编程的核心,但是我发现大部分Java程序员热衷于像单例模式、装饰者模式或观察者模式这样的设计模式,而并没有十分注意学习面向对象的分析和设计。学习面向编程的基础(如抽象,封装,多态,继承等)是非常重要的,而运用它们来设计干净的模块也同样重要。我也认识很

JAVA上加密算法的实现用例

通常,使用的加密算法 比较简便高效,密钥简短,加解密速度快,破译极其困难。本文介绍了 MD5/SHA1,DSA,DESede/DES,Diffie-Hellman的使用。第1章基础知识 1.1. 单钥密码体制单钥密码体制是一种传统的加密算法,是指信息的发送方和接收方共同使用同一把密钥进行加解密。通常,使用的加密算法比较简便高效,密钥简短,加解密速度快,破译极其困难。但是加密
Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×