我们来自五湖四海,不为别的,只因有共同的爱好,为中国互联网发展出一分力!
领航时时彩重庆版

滁州时时彩开奖视频:Java如何访问private变量?

2014年07月03日17:43 阅读: 27455 次

领航时时彩重庆版 www.9nwl5.cn 标签: Java如何访问private变量?

大家都知道private变量是无法访问的,一编译就报错根本无法访问啊。本文教你如何破解这种限制。


实现的原理是利用了Java的反射机制。


首先定义一个最简单的类,只有一个私有变量和一个公开的方法。代码如下:

?
1
2
3
4
5
6
7
8
class Foo {
    private String message = "This is a Foo.";
 
 
    public void show() {
        System.out.println(message);
    }
}





正常情况下调用show函数会输出“This is a Foo.”。下面这段代码通过setAccessible方法绕过了Java的权限检测。

?
1
2
3
Class<foo> fooClass = (Class<foo>) foo.getClass();
Field messageField = fooClass.getDeclaredField("message");
messageField.setAccessible(true); // 绕过权限检测!</foo></foo>



setAccessble接受一个布尔类型的参数,true表示绕过Java的权限检测机制,false表示启用权限检测。上面调用了setAccessible(true)因此Java在访问的时候不会检测权限。这个方法在调用时需要虚拟机的ReflectPermission("suppressAccessChecks")权限。


为什么要访问private变量呢?因为有时候在串行化的时候必须要访问私有变量。


访问私有的方法也是类似。但是这种代码不宜使用太多,否则会造成程序混乱,无法维护。


下面是完整的代码:
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
import java.lang.reflect.*;
 
 
public class AccessPrivate {
 
 
    public static void main(String[] argv) throws Exception {
        // 定义一个测试对象
        Foo foo = new Foo();
 
 
        // 正常情况,测试函数
        foo.show();
 
 
        // 绕过Java权限检测
        Class<foo> fooClass = (Class<foo>) foo.getClass();
        Field messageField = fooClass.getDeclaredField("message");
        messageField.setAccessible(true); // 绕过权限检测!
        System.out.println("Foo is hacked!");
 
 
        // 修改message变量
        messageField.set(foo, "This is a Bar.");
 
 
        // 再次调用测试函数
        foo.show();
    }
}
 
 
class Foo {
    private String message = "This is a Foo.";
 
 
    public void show() {
        System.out.println(message);
    }
}</foo></foo>




另外,还有一种方法,就是通过编写native库进行访问,因为native中所有的访问都不需要权限检测。
分享到: 更多
©2019 安全焦点 版权所有.

  • 2018年世界杯防骗宝典!拒绝和骗子一起狂欢! 2019-04-16
  • [微笑]其实很简单就能破这个局:立法禁止通过房地产二次交易获利,炒房就会被杜绝,炒房一旦被杜绝,房价就会受正常供需关系影响波动在合理范围内。 2019-04-16
  • 中国人打仗?被逗了。独生子一代、捧在手里长大的90后00后、站在甲板上飒爽英姿、硝烟战火血肉横飞的场景、会失去行动能力的。这不是耸人听闻。 2019-04-14
  • 乌鲁木齐市水磨沟区开建两座立体停车库 2019-04-14
  • 吕洪蕾:网络信息技术在干部工作中的运用研究 2019-04-04
  • 聚焦中央经济工作会议 2019-03-30
  • 沈杰:在北京打拼的“90后”台湾律师 2019-03-30
  • 法国总统马克龙首次访华 法国居民期待成果 2019-03-25
  • 【新媒体矩阵】长城编小厨 2019-03-25
  • 1949年刚刚进入北平的人民日报校对科夜班工作场面 2019-03-22
  • 江西省“放管服”改革再出实招 2019-03-21
  • 让“毒跑道”绝迹 内蒙古各方联手共同监管校园跑道 2019-03-20
  • 宁夏石嘴山支队隆重举行退伍老兵欢送仪式 2019-03-19
  • 月销过万!赛道疾驰! 吉利帝豪GL竞争力解析 2019-03-19
  • 靠啥为基层留住人才?( 民生视线·引导人才流动 助力均衡发展①) 2019-03-15
  • 650| 254| 742| 390| 582| 942| 238| 647| 192| 249|