Вся информация доступна через HttpServletRequest
.Вы можете получить его:
Внедрение зависимостей
Самый простой способ - ввести запрос сервлета непосредственно в ваш UserDetailsService:
класс:
public MyDetailsService implements UserDetailsService {
@Autowired
private HttpServletRequest request;
//...
}
(в соответствии с предложением OP) Не забудьте добавить следующий слушатель к вашему web.xml
:
<listener>
<listener-class>
org.springframework.web.context.request.RequestContextListener
</listener-class>
</listener>
ОБНОВЛЕНИЕ: Это работает, потому что Spring внедряет специальный прокси с областью действия, реализующий HttpServletRequest
, так что вы можете получить доступСфера действия запроса "bean" от синглтона MyDetailsService
.Под капотом каждый вызов параметров request
направляется на org.springframework.web.context.request.RequestContextHolder#requestAttributesHolder
ThreadLocal
, к которому вы также можете получить прямой доступ.Как вы можете видеть, Spring очень гибок, когда дело доходит до определения правил.Это просто работает.
RequestContextHolder
Другой подход заключается в использовании RequestContextHolder
:
HttpServletRequest request =
((ServletRequestAttributes) RequestContextHolder.
currentRequestAttributes()).
getRequest();
Далее: