Тайм-аут сеанса конфигурации сервлета для запроса области - PullRequest
0 голосов
/ 04 августа 2020

У меня проблемы с сохранением текущего пользователя из запроса веб-службы в базе данных истории.

Я полагаю, это из-за тайм-аута сеанса в дескрипторе развертывания сервлета <session-timeout>120</session-timeout> и этого клиент - это микросервис (пользовательское приложение -> микросервис -> веб-сервис). Пользовательское приложение отправляет авторизацию в базовом c, а микросервис просто передает его запросу веб-службы.

Мы можем воспроизвести проблему следующим образом:

  • пользователь -app A выполняет запрос, пользователь A сохраняется в истории db
  • пользовательское приложение B выполняет запрос, пользователь A сохраняется в истории db

Подробная информация о веб-сервисе:

<session-config>
    <session-timeout>120</session-timeout>
</session-config>
<security-constraint>
    <display-name>Login Security Constraint WS</display-name>
    <web-resource-collection>
        <web-resource-name>Protected Area WS</web-resource-name>
        <url-pattern>/MyWebService</url-pattern>
        <http-method>POST</http-method>
    </web-resource-collection>
    <auth-constraint>
        <role-name>Superuser</role-name>
        <role-name>etc</role-name>
    </auth-constraint>
    <user-data-constraint>
        <transport-guarantee>NONE</transport-guarantee>
    </user-data-constraint>
</security-constraint>
<login-config>
    <auth-method>BASIC</auth-method>
    <realm-name>ABC</realm-name>
</login-config>

Java:

@Resource
public void setContext(final WebServiceContext context) {
    this.context = context;
}

...

HttpServletRequest request = (HttpServletRequest) context.getMessageContext().get(MessageContext.SERVLET_REQUEST);
username = request.getUserPrincipal().getName();

Я думал, что один из способов решения моей проблемы - чтобы изменить сервлет с сеанса на область запроса.

Но не знаю, как это изменить.

Спасибо за вашу помощь!

...