我想通过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);
我是否需要设置更多属性? 我应该注意别的什么吗?
如果有人能帮助我,我会很高兴。