JAAS通过WildFly

时间:2015-04-28 09:27:07

标签: java authentication wildfly wildfly-8 jaas

我想通过WildFly(8.2.0)在JAVA应用程序中使用JAAS-Authentication。

我尝试了几种方法和配置....但我仍然在登录时遇到错误(LoginContext)。

我已经开始配置standalone.xml(WildFly):

  • 使用JAAS身份验证创建了一个新的安全领域“TPRealm”:

    <security-realm name="TPRealm">
         <authentication>
             <jaas name="TPLogin"/>
         </authentication>
    </security-realm>
    
  • 将域设置为默认值?:

    <subsystem xmlns="urn:jboss:domain:remoting:2.0">
         <endpoint worker="default"/>
            <http-connector name="http-remoting-connector" connector-ref="default" security-realm="TPRealm"/>
    </subsystem>
    
  • 最后,我使用登录模块创建了一个安全域“TPLogin”:

    <security-domain name="TPLogin" cache-type="default">
        <authentication>
            <login-module code="Database" flag="required">
                <module-option name="dsJndiName" value="java:jboss/datasources/TourPlanningDS"/>
                <module-option name="principalsQuery" value="select passwordHash from TaUser where login=?"/>
            </login-module>
        </authentication>
    <security-domain>
    

在Java中:

String username = "Admin";
String password = "admin";

PasswordClientCallbackHandler handler = new PasswordClientCallbackHandler(username, "TPRealm", password.toCharArray());

try {
      LoginContext loginContext = new LoginContext("TPRealm", handler);
      loginContext.login();
} catch (LoginException e) {
      System.out.println("Login failed");
      return;
}

在“新的LoginContext(...)”中,我收到以下错误

javax.security.auth.login.LoginException: No LoginModules configured for TPRealm

Moreoften我读过,需要配置文件(jaas.config):

TPRealm {
      org.jboss.security.auth.spi.TPLogin required;  // I dont know, what exactly have to stay here
}

我将此文件添加到System.Properties。

System.setProperty("java.security.auth.login.config", jaasConfig)  //jaasConfig = path to file

有了这个,我可以编译“new LoginContext(...)”但是在loginContext.login()的下一行编译failes:

javax.security.auth.login.LoginException: unable to find LoginModule class: org.jboss.security.auth.spi.TPLogin

我还看到了wildfly的日志,期望在运行代码时记录任何内容,但没有记录任何内容。

在Java Application中我添加了这些属性:

Properties ejbProps = new Properties();
ejbProps.put("endpoint.name", "client-endpoint");
ejbProps.put("remote.connectionprovider.create.options.org.xnio.Options.SSL_ENABLED", "false");
ejbProps.put("remote.connections", "default");
ejbProps.put("remote.connection.default.host", "localhost");
ejbProps.put("remote.connection.default.port", "8080");                                                  
ejbProps.put("remote.connection.default.connect.options.org.xnio.Options.SASL_POLICY_NOANONYMOUS", "false");

EJBClientConfiguration cc = new PropertiesBasedEJBClientConfiguration(ejbProps);
ContextSelector<EJBClientContext> selector = new ConfigBasedEJBClientContextSelector(cc);
EJBClientContext.setSelector(selector);

我是否需要设置更多属性? 我应该注意别的什么吗?

如果有人能帮助我,我会很高兴。

0 个答案:

没有答案