Spring security 检查Spring Security MethodInvocation以获取精确的参数信息

Spring security 检查Spring Security MethodInvocation以获取精确的参数信息,spring-security,java-reflection,Spring Security,Java Reflection,Spring Security正在尝试了解如何使用实例获取: 传递给方法的所有参数(名称和类型)的列表;及 每个参数对应的值 有MethodInvocation#getArguments():Object[]方法,但是绝对没有Spring安全文档说明可以在对象数组中返回什么类型。它是一个包含被调用方法的所有参数的数组。最左边的参数从索引0开始,依此类推 假设调用的方法是: void hello(整数int、字符串str、布尔布尔布尔); 并通过以下方式调用: hello(1000,“世界”,真

Spring Security正在尝试了解如何使用实例获取:

  • 传递给方法的所有参数(名称和类型)的列表;及
  • 每个参数对应的值

  • MethodInvocation#getArguments():Object[]
    方法,但是绝对没有Spring安全文档说明可以在对象数组中返回什么类型。

    它是一个包含被调用方法的所有参数的数组。最左边的参数从索引0开始,依此类推

    假设调用的方法是:

    void hello(整数int、字符串str、布尔布尔布尔);
    
    并通过以下方式调用:

    hello(1000,“世界”,真的);
    
    然后
    MethodInvocation#getArguments()
    将返回一个数组:

    • 在索引0处:整数1000
    • 索引1:字符串“世界”
    • 在索引2处:布尔值为true
    您可以在每个参数对象上使用
    getClass()
    来访问它们的类型信息,如果您想访问该类型的特定方法,可以将其强制转换为实际的类。比如:

    Object[]args=methodInvocation.getArguments();
    args[0]。getClass()//返回整数类
    if(args[0]instanceof Integer){
    ((Integer)arg[0]).intValue();//将其强制转换为Integer并访问Integer提供的特定方法
    }
    

    如果被调用的方法没有任何输入参数,则返回null。

    它是一个数组,包含被调用方法的所有参数。最左边的参数从索引0开始,依此类推

    假设调用的方法是:

    void hello(整数int、字符串str、布尔布尔布尔);
    
    并通过以下方式调用:

    hello(1000,“世界”,真的);
    
    然后
    MethodInvocation#getArguments()
    将返回一个数组:

    • 在索引0处:整数1000
    • 索引1:字符串“世界”
    • 在索引2处:布尔值为true
    您可以在每个参数对象上使用
    getClass()
    来访问它们的类型信息,如果您想访问该类型的特定方法,可以将其强制转换为实际的类。比如:

    Object[]args=methodInvocation.getArguments();
    args[0]。getClass()//返回整数类
    if(args[0]instanceof Integer){
    ((Integer)arg[0]).intValue();//将其强制转换为Integer并访问Integer提供的特定方法
    }
    

    如果调用的方法没有任何输入参数,它将返回null。

    谢谢@Ken(+1)--非常好的答案;只是好奇,你在哪里找到这些信息的?我到处找它!也就是说,您如何知道
    参数:Object[]
    中返回的实例不是
    SpringArgument
    ,或
    SpringArgument
    ,等等。我根据使用java反射API的经验找到了这些信息,然后还可以通过检查代码来快速验证它,
    MethodInvocation
    实现之一确实是从java
    InvocationHandler
    API获取这样的值,因此它的行为应该类似于前面提到的
    args
    ,您必须使用
    getClass()
    访问java对象的类型信息,以了解该对象是否属于某种类型。是的,我只是觉得Spring Security的员工在他们的文档中没有明确指出这一点,这是一个很大的飞跃
    Object
    可以是任何东西,比如
    String
    ,或
    SpringArgument
    SillyPuttyFizzybuzz
    。谢谢@Ken(+1)--回答得真棒;只是好奇,你在哪里找到这些信息的?我到处找它!也就是说,您如何知道
    参数:Object[]
    中返回的实例不是
    SpringArgument
    ,或
    SpringArgument
    ,等等。我根据使用java反射API的经验找到了这些信息,然后还可以通过检查代码来快速验证它,
    MethodInvocation
    实现之一确实是从java
    InvocationHandler
    API获取这样的值,因此它的行为应该类似于前面提到的
    args
    ,您必须使用
    getClass()
    访问java对象的类型信息,以了解该对象是否属于某种类型。是的,我只是觉得Spring Security的员工在他们的文档中没有明确指出这一点,这是一个很大的飞跃
    Object
    可以是任何对象,例如
    字符串
    ,或
    SpringArgument
    SillyPuttyFizzybuzz