web-dev-qa-db-ja.com

POJOクラスのサーブレットリクエストオブジェクトを取得する

Acegiクラスから呼び出されているPOJOの現在のページURLを取得する必要があり(作業中のアプリにカスタムロジックを追加する必要があります)、HttpServletRequestを取得して、サブドメインのサブドメインを取得できるようにする必要がありますURL(ロジックのベース)。

追加しようとしました:

@Autowired
private HttpServletRequest request;

...

public void setRequest(HttpServletRequest request) {
    this.request = request;
}

public HttpServletRequest getRequest() {
    return request;
}

ただし、コードでリクエストオブジェクトを使用しようとすると、nullになります。

私が何を間違っているのか、これをどのようにすればもっとうまくできるのか?

27
NRaf

Beanがリクエストスコープの場合は、行うようにHttpServletRequestを自動ワイヤリングできます。

_@Component
@Scope("request")
public class Foo {
    @Autowired private HttpServletRequest request;

    //
}
_

それ以外の場合は、次のように現在のリクエストを取得できます。

_    ServletRequestAttributes sra = (ServletRequestAttributes)RequestContextHolder.getRequestAttributes();
    HttpServletRequest req = sra.getRequest();     
_

これは内部でスレッドローカルを使用します。

Spring MVCを使用している場合は、それで十分です。 Spring MVCを使用していない場合は、_web.xml_に RequestContextListener または RequestContextFilter を登録する必要があります。

48
sourcedelica