我有一个资源类
public class SecureResource {
private HttpServletRequest request;
// some more things here
}
我想使用 java 反射来运行 request.getHeader('X-AUTH')
?
我试过什么?
Field f = response.getResourceClass().getDeclaredField("request");
f.setAccessible(true);
f.get("X-AUTH");
我明白了
java.lang.IllegalArgumentException: Can not set javax.servlet.http.HttpServletRequest field com.sn.bb.service.SecureResource.request to java.lang.String
我错过了什么?如何在 f
上运行 request.getHeader('X-AUTH')
?
最佳答案
您当前正在尝试获取该字段,就好像它是java.lang.String
实例上的一个字段一样。假设您已经有了 SecureResource
的实例,因此您想要调用:
Field f = response.getResourceClass().getDeclaredField("request");
f.setAccessible(true);
HttpServletRequest request = (HttpServletRequest) f.get(resource);
String auth = request.getHeader("X-AUTH");
(其中 resource
是对 SecureResource
相关实例的引用。)
就是说,即使您可以使用它,我也会尽可能地强烈反对它。您的代码在有严格的安全管理器的情况下将无法工作,它在面对实现更改时会很脆弱,并且通常表明您正在尝试做一些类不是为之设计的事情。
关于java - 如何使用反射在私有(private)字段上运行方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18473845/