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 に答える