我有一个资源类
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
我错过了什么?如何在request.getHeader('X-AUTH')
上运行f
?
答案 0 :(得分:10)
您当前正在尝试获取字段,就像它是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
的相关实例的引用。)
那就是说,即使你已经开始工作,我也会强烈劝阻它,如果可能的话。你的代码不适用于有严格安全管理器的场景,面对实现的变化会很脆弱,而且通常建议你尝试做一些没有设计类的东西。