Нет аутентификатора для программного входа

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

13: 27: 28,444 ОШИБКА [com.commit.steam.rest.RestLoginService] (http-localhost-127.0.0.1-8080-2) Ошибка при входе в систему: javax.servlet.ServletException: Нет аутентификатора, доступного для программного входа в org.apache.catalina.connector.Request.login(Request.java:3254) [jbossweb-7.0.13.Final.jar:] at org.apache.catalina.connector.RequestFacade.login(RequestFacade.java:1082) [jbossweb-7.0.13.Final.jar:] на com.commit.steam.rest.RestLoginService.login(RestLoginService.java:128) [steam-rest-api-0.1.6-SNAPSHOT.jar:]

из standalone.xml:

<security-domain name="steam" cache-type="default">
                <authentication>
                    <login-module code="org.jboss.security.auth.spi.DatabaseServerLoginModule" flag="required">
                        <module-option name="dsJndiName" value="java:jboss/datasources/STEAMDS"/>
                        <module-option name="principalsQuery" value="select U.PASSWORD from USERS U where U.EMAIL=?"/>
                        <module-option name="rolesQuery" value="select R.NAME, 'Roles' from USERS U join USER_ROLES UR on U.ID = UR.USER_ID join ROLES R on UR.ROLE_ID = R.ID where U.EMAIL=?"/>
                        <module-option name="hashAlgorithm" value="SHA-256"/>
                        <module-option name="hashEncoding" value="base64"/>
                    </login-module>
                </authentication>
            </security-domain>

JBoss-web.xml:

<?xml version="1.0"?>
<jboss-web>
  <security-domain>steam</security-domain>
</jboss-web>

Я использую JBoss-as 7.1.1.Final

Во время отладки я вижу, что первый запрос (HttpServletRequest.context.authenticator) имеет NonLoginAuthenticator, а к имени входа со вторым сеансом не прикреплен никакой аутентификатор (т. Е. HttpServletRequest.context.authenticator имеет значение null). Каждый следующий запрос в первом сеансе имеет один и тот же Authenticator для запроса (когда я тестирую бизнес-потоки для одного пользователя).

HttpServletRequest внедряется на уровне класса

@Context
private HttpServletRequest request;

protected HttpServletRequest request() {
    return this.request;
}

(Я пытался переместить инъекцию на уровень метода, но это не помогло). Мой класс отдыха помечен как bean-компонент @Stateless (для инъекций).

Я пробовал переключать сессии (я использую Chrome и FireFox для обеспечения разных сессий), но это ничего не изменило.

У кого-нибудь есть идеи или указания, где мне нужно искать эту проблему?

Большое спасибо Ави

1 ответ

Добавить <security-constraint> элемент к вашему web.xml. Что-то вроде этого:

<security-constraint>
        <web-resource-collection>
              <web-resource-name>Permit all</web-resource-name>
              <url-pattern>/*</url-pattern>
        </web-resource-collection>
        <auth-constraint>
              <role-name>*</role-name>
        </auth-constraint>
  </security-constraint>
Другие вопросы по тегам