web-dev-qa-db-ja.com

Spring BeanでHttpServletRequestを取得するにはどうすればよいですか?

FlexベースのフロントエンドとSpring/Hibernateバックエンドを備えたアプリを開発しています。

Facebookの統合を現在の方法で機能させるには、バックエンドのフロントエンドでJavaScriptに設定されたCookieを読み取り、ログイン中にユーザーが自分のFacebookを偽装しようとしているかどうかを確認する必要がありますログインする。

これは非常に簡単ですが、HttpServletRequestを取得する方法がわかりません。私はかなり基本的なSpring設定を使用しています(これは私の最初の実際のSpringアプリであり、今ではかなり精通していますが、見たことのないものがたくさんあります)

私はSpring MVCやSpring WebFlowなどを使用していません。 ServletContextは取得できますが、リクエストを取得する方法はまだわかりません。

助けがありますか?

34
Jason Maskell

FlexContextが利用できない場合:

解決策1:内部メソッド(> = Spring 2.0が必要)

HttpServletRequest request = 
        ((ServletRequestAttributes)RequestContextHolder.getRequestAttributes())
                .getRequest();

解決策2:Bean内(2.5以上でサポート、シングルトンBeanのSpring 3.0が必要!)

@Autowired
private HttpServletRequest request;
106
Gerrit Brehmer

これは一種のFlex/BlazeDS特有のものですが、ここに私が思いついた解決策があります。私自身の質問に答えることが偽物である場合は申し訳ありません。

    HttpServletRequest request = flex.messaging.FlexContext.getHttpRequest();

    Cookie[] cookies = request.getCookies();

    for (Cookie c:cookies)
    {
        log.debug(String.format("Cookie: %s, %s, domain: %s",c.getName(), c.getValue(),c.getDomain()));
    }

動作します、クッキーを取得します。私の問題はSpringに目を向けていました-BlazeDSにはそれがありました。おそらく春もそうでしょうが、私はまだそれを得る方法を知りません。

11
Jason Maskell

@eeezyyの答えは私にとってはうまくいきませんでしたが、私はSpring Boot(2.0.4)を使用していますが、それは異なる可能性がありますが、2018年のここでのバリエーションはこうして機能します:

@Autowired
private HttpServletRequest request;
2
chrismacp

@Contextアノテーション(この質問の回答を参照してください: Springでのコンテキストアノテーションの機能 ).

私は使わなければなりませんでした

@Context
private HttpServletRequest request;
2
eeezyy

これはそれを行う必要があります

((ServletRequestAttributes)RequestContextHolder.getRequestAttributes()).getRequest().getRequestURI();