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