1

我有一个资源类

public class SecureResource {

    private HttpServletRequest request;

    // some more things here
}

我想request.getHeader('X-AUTH')使用java反射来运行吗?

我试过什么?

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

4

1 回答 1

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。)

也就是说,即使你已经让它工作了,如果可能的话,我会强烈反对它。您的代码在有严格的安全管理器的情况下将无法工作,面对实现的更改它会变得脆弱,并且通常表明您正在尝试做一些不是为该类设计的事情。

于 2013-08-27T19:31:08.363 回答