java如何禁掉反射
2016-05-13 10:17
507 查看
SecurityManager
有一个checkMemberAccess这个方法可以阻止利用反射;
如:
前面一个为CLASS,后面需要填一个INT值,Member.PUBLIC 代表可以访问,
如果是PUBLIC,反射可以执行,DECLARED,反射运行时,会报错。
参考:http://bbs.csdn.net/topics/390472034
有一个checkMemberAccess这个方法可以阻止利用反射;
如:
SecurityManager sm = new SecurityManager(); sm.checkMemberAccess(Test.class, Member.PUBLIC);
前面一个为CLASS,后面需要填一个INT值,Member.PUBLIC 代表可以访问,
如果是PUBLIC,反射可以执行,DECLARED,反射运行时,会报错。
SecurityManager另外一个例子:
package com.jd.basic.pk.manager; import java.lang.reflect.Field; import java.security.Permission; public class UseReflection { static { try { System.setSecurityManager(new MySecurityManager()); } catch (SecurityException se) { System.out.println("SecurityManager already set!"); } } public static void main(String args[]) { Object prey = new Prey(); try { Field pf = prey.getClass().getDeclaredField("privateString"); pf.setAccessible(true); pf.set(prey, "Aminur test"); System.out.println(pf.get(prey)); } catch (Exception e) { System.err.println("Caught exception " + e.toString()); } } } class Prey { @SuppressWarnings("unused") private String privateString = "privateValue"; } class MySecurityManager extends SecurityManager { public void checkPermission(Permission perm) { if (perm.getName().equals("suppressAccessChecks")) { throw new SecurityException("Can not change the permission dude.!"); } } }
参考:http://bbs.csdn.net/topics/390472034
相关文章推荐
- Java实现的一个简单聊天软件
- Java设计模式(一) 设计模式初探——简单工厂和工厂方法模式
- 多线程08:《疯狂Java讲义》学习笔记——线程池
- java基础知识及深层原理。
- Java基础整理(二)
- JDK 5.0 注解知识快速进阶
- 排序算法及其Java实现
- SpringMVC+Spring4+Mybatis3+Log4j集成
- Spring @Transactional
- mybatis+spring启动卡死解决方法
- spring+hibernate:在applicationCOntext.XML中配置C3P0参数说明
- Java基础-值传递与地址传递
- Java定时调度 Timer类和TimerTask类
- 关于spring 防sql注入,转义反转义,入参检查
- Spring-Mybatis分页--PageHelper
- 【JDK】:ConcurrentHashMap高并发机制——【转载】
- java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener
- PMD logoJava代码检查工具 PMD
- java知识结构
- Java中的final,finally和finalize的区别