java - 如何使用反射在私有(private)字段上运行方法?

标签 java reflection

我有一个资源类

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/

相关文章:

java - 最大整数横向数组

java - 如何使用java以编程方式更改 vector 绘图的大小

c# - 如何反射性地判断属性是否具有公共(public) Setter

c# - 从类型创建类实例

c# - 将动态对象列表读入 CSV

java - servlet 中的多个客户端请求

java - Java制作的小程序可以向服务器发送信息吗?

java - 如果在围绕同步锁的循环中使用变量,是否会读取 "fresh from main memory"?

反射——恢复时间.时间实例

c# - 如何通过反射过滤任何属性的集合?