Нет аутентификатора для программного входа
Я получаю эту ошибку всякий раз, когда пытаюсь войти в систему с двумя разными пользователями в двух разных сеансах.
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>