如何防止通过反射访问私有方法

我们知道通过反射可以访问私有方法,有时候就会想有什么方法可以防止私有方法被访问呢,设定SecurityManager。默认的情况下SecurityManager是空的。
有时间可以把:SecurityManager 研究下

package com.patterns;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.security.Permission;
import java.security.SecurityPermission;

import sun.reflect.Reflection;


public class Test{
public static void main(String[] args) throws NoSuchMethodException, SecurityException{
A a = new A();
SecurityManager sp = System.getSecurityManager();
Class cl = a.getClass();

Method m = cl.getDeclaredMethod("test", (Class[])null);
m.setAccessible(true);
}
}

class A{
static{
System.setSecurityManager(new SecurityManager());
}
private void test(){
System.out.println("hello");
}
}

另外有的同学想,你既然可以set,我也可以重新给set为null啊,注意一旦set之后,重新set会抛出异常。在think in java里提到:似乎没有什么方法可以防止访问私有方法。书中讨论了各式各样的类:嵌套类,匿名内部类。也许SecurityManager是解决这个的唯一方法。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值