没有可用于程序化登录的身份验证器

时间:2014-05-13 14:37:17

标签: authentication servlets jboss7.x resteasy servlet-container

每当我尝试在两个不同的会话中与两个不同的用户登录时,我就会收到此错误。

13:27:28,444 ERROR [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:]   在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;
}

(我试图将注射移到方法级别,但它没有帮助)。我的休息类注释为@Stateless bean(允许注入)。

我尝试切换会话(我使用Chrome和FireFox来确保不同的会话),但它没有改变任何内容。

有没有人对我需要寻找此问题的地方有任何想法或领导?

非常感谢 阿维

1 个答案:

答案 0 :(得分:1)

在您的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>