当我尝试在两个不同的会话中使用两个不同的用户登录时,我总是得到这个错误。
13:27:28,444 ERROR [com.commit.steam.rest.RestLoginService] (http-localhost-127.0.0.1-8080-2)登录错误:javax.servlet.ServletException: No authenticator available for programmatic login[jbossweb-7.0.13.Final.jar][jbossweb-7.0.13.Final.jar][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和第二个会话的登录没有任何authenticator附加到它(即HttpServletRequest.context.authenticator为空)。第一个会话中的每个后续请求在请求上都具有相同的Authenticator(当我为一个用户测试业务流时)。
HttpServletRequest被注入到类级别
@Context
private HttpServletRequest request;
protected HttpServletRequest request() {
return this.request;
}
(我试图将注入移动到方法级别,它没有帮助)。我的rest类被注释为@Stateless bean(允许注入)。
我尝试切换会话(我使用Chrome和FireFox来确保不同的会话),但它没有改变任何东西。
有没有人有任何想法或导致我需要在哪里寻找这个问题?
非常感谢Avi
在web.xml中添加一个<security-constraint>
元素。像这样:
<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>