Подтвердить что ты не робот

Получить объект запроса Servlet в классе POJO

Мне нужно получить текущий URL-адрес страницы в POJO, который вызывается из класса Acegi (необходимо добавить какую-то пользовательскую логику для приложения, над которым я работаю), и вам нужно получить HttpServletRequest, чтобы я мог получить субдомен URL (на котором основана логика).

Я попытался добавить:

@Autowired
private HttpServletRequest request;

...

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

public HttpServletRequest getRequest() {
    return request;
}

Однако, когда я пытаюсь использовать объект запроса в своем коде, он равен нулю.

Любая идея, что я делаю неправильно или как я могу лучше это делать?

4b9b3361

Ответ 1

Если bean - это область запроса, вы можете авторизовать HttpServletRequest, как вы делаете.

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

    //
}

В противном случае вы можете получить текущий запрос следующим образом:

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

Это использует thread-local под обложками.

Если вы используете Spring MVC, все, что вам нужно. Если вы не используете Spring MVC, вам необходимо зарегистрировать RequestContextListener или RequestContextFilter в web.xml.