`
youngerbaby
  • 浏览: 115082 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

反射调用private方法的权限赋予

    博客分类:
  • Java
阅读更多

在做反射调用的时候通常会遇到调用private方法的权限问题,即便可以拿到private方法的Method对象,但是有的时候调用

method.setAccessible(true);

后,任然不可以访问这个私有方法,现在还没搞清楚到底是怎么回事儿。不过可以暂时这样处理,下面的类继承自java.security.PrivilegedAction接口,这个接口的作用是启用特权的情况下要执行的计算。通过这个类的run方法执行

method.setAccessible(true);

 

    /**
     * 对private和protected方法增加调用权限
     * MethodAccessibilityCallback
     * @author 老付
     *
     */
    private class MethodAccessibilityCallback implements PrivilegedAction<Object> {
        private final Method method;
        public MethodAccessibilityCallback(Method method) {
            this.method = method;
        }
        @Override
        public Object run() {
            method.setAccessible(true);
            return Void.class;
        }
    }

 这个时候私有方法通过反射到用一定是可以的!还要额外价格判断,如下面代码

 

if (!method.isAccessible()) {
            doPrivileged(new MethodAccessibilityCallback(method));
        }

 赋予private方法的执行权限。这样就ok了!发出这篇文章感觉不是很严谨,因为还没找出问什么有的时候直接method.setAccessible(true)是可以的,有的时候又不行(我写了一个简单的测试类可以,但是在我们的线上应用中似乎不行),还要继续研究,尤其是java访问权限这块的原理,之后给出原因和解释!

分享到:
评论

相关推荐

    frida反射调用对象中的方法与字段.pdf

    本文主要讲解了在遇到需要操作Java对象的参数或返回值时,如何利用Frida这一动态代码插桩工具来进行反射调用,包括调用对象的方法和获取对象的字段。Frida是一个强大的动态代码插桩工具,它可以注入到几乎所有的进程...

    Java反射调用方法

    Java反射是Java语言提供的一种强大的动态类型特性,它允许程序在运行时检查和操作类、接口、对象等的内部信息,包括但不限于获取类的方法、字段、构造器等,并能动态调用方法和修改字段值。这个特性使得Java具有了更...

    反射调用private方法实践(php、java)

    然后通过调用`setAccessible(true)`方法,我们可以临时改变这个私有方法的访问权限,使其在当前上下文中可访问。这样,我们就可以使用`invokeArgs()`方法来调用私有方法并传递参数。 以下是使用PHP反射调用私有方法...

    利用反射暴力调用方法 利用反射暴力为属性赋值

    该资源简述了对所有方法进行调用,属性进行赋值.一般情况下private protected 访问修饰符号的方法和属性不能被调用,受到限制.该资源得到了很好的解决!

    C#私有成员反射调用类库

    要使用反射调用私有方法,首先需要获取到包含该方法的类型实例,然后找到相应的方法信息,最后通过Invoke方法执行该方法。以下是一个简单的示例: ```csharp using System; using System.Reflection; class ...

    C# Winform 反射调用打开窗体

    反射允许程序在运行时检查自身的信息,包括类型、属性、方法等,并且可以动态创建对象实例,调用方法,访问字段和属性。这在设计灵活的系统,如插件架构、配置驱动的代码或元数据驱动的应用程序中非常有用。 2. **...

    Android 下通过反射调用加载/卸载(mount/unmount) 外置SD卡

    然后,通过反射调用这些方法并传入相应路径,执行挂载或卸载操作。 6. **权限和安全考虑**: 进行这样的操作需要较高的系统权限,通常在系统应用或者具有`android.permission.MOUNT_UNMOUNT_FILESYSTEMS`权限的...

    反射实例反射调用DLL里的方法

    在.NET框架中,反射是一种强大的工具,它允许程序在运行时检查自身并执行各种操作,如创建对象、访问属性和方法、以及调用未知类型的成员。在这个实例中,我们将探讨如何使用反射来调用DLL(动态链接库)中的方法。 ...

    junit测试private函数

    3. **设置访问权限**:由于私有方法默认不允许外部直接访问,因此在测试前,我们需要通过`setAccessible(true)`方法取消访问限制,允许反射调用。 4. **调用私有方法**:使用`Method`对象的`invoke()`方法,传入...

    C# Lambda反射调用与泛型方法配合

    学习要点: * 1.如何利用Lambda 跟泛型方法配合的区别 .(非委托) * 2.利用Lambda 反射调用属性值 .

    c#反射调用方法示例

    反射是一种允许用户获得类信息的C#功能,Type对象映射它代表的底层对象; 在.Net 中, 一旦获得了Type对象,就可以使用GetMethods()方法获取此类型支持的方法列表;该方法的两种形式: MethodInfo [] GetMethods() ...

    反射方法调用model

    反射方法调用model

    Java 反射详解(包含私有方法属性的调用)

    Java反射是Java编程语言中的一个强大特性,它允许在运行时检查类、接口、字段和方法的信息,并且能够在运行时动态地创建对象和调用方法。这个特性使得Java程序具有了高度的灵活性和动态性,尤其在框架开发、插件系统...

    java反射调用封装接口

    万能的反射封装接口,值得下载参考,当成util

    Java反射调用工具类

    Java反射调用是Java语言提供的一种强大的动态类型机制,它允许程序在运行时检查并使用类的信息,包括类的方法、属性以及构造器等。在Java中,反射是通过`java.lang.reflect`包中的类实现的,如`Class`、`Constructor...

    利用java反射调用Android隐藏Api

    利用java的反射原理来调用 Android隐藏api 应用开发必备哦 详细描述: http://blog.csdn.net/y_haiyang/article/details/9924925 ====================关注小鱼=================== 新浪微博:...

    反射调用工具类

    完美的解决反射调用的工具使用类,封装的方法,调用很方便。

    如何通过反射调用方法[参考].pdf

    本文将深入探讨如何通过反射调用方法,以及相关的技术细节。 首先,我们要了解`System.Reflection`命名空间中的`Type`类。`Type`对象代表.NET框架中的类型,它提供了访问类、接口、结构等元数据的途径。要调用方法...

    反射调用assets下的jar

    这时,我们可以将这些代码打包成JAR文件,并放置在项目的assets目录下,然后通过Java的反射机制来调用其中的方法。以下将详细讲解这个过程及其相关的知识点。 首先,我们需要理解“反射”这一概念。在Java中,反射...

    反射调用代码参考大全

    ITypeLib* pTypeLib = NULL; ITypeInfo* pTypeInfo = NULL; FUNCDESC* pFuncDesc; MEMBERID idMember; HRESULT hr; INVOKEKIND invKind;...BSTR bstrDllName, bstrFuncName;...if( SUCCEEDED(hr) )

Global site tag (gtag.js) - Google Analytics