Arquillian不提供任何用于定义领域的支持。相反,您需要自己在容器中配置领域。当使用嵌入式Glassfish容器时,这有些棘手,但可行。
我假设这
secureJDBCRealm是一个自定义领域,而不是标准/内置的Glassfish领域之一。为了在嵌入式Glassfish容器中配置自定义领域,您需要:
login.conf
在引用该领域的测试类路径上放置一个文件。为此,向您的资源目录添加一个config目录,并将其放置login.conf
在该目录中。你login.conf
会看起来像这样secureJDBCRealm {com.blah.blah.LoginModule required;
};您的自定义领域以及所有依赖项都必须位于测试类路径上。
您需要以编程方式在glassfish中创建领域。这可以通过org.glassfish.embeddable.CommandRunner来完成。幸运的是,Arquillian嵌入式容器通过JNDI使它可用,这意味着您可以执行以下操作:
@Resource(mappedName = "org.glassfish.embeddable.CommandRunner") CommandRunner commandRunner;
public void configureLoginRealm() {
CommandResult commandResult = commandRunner.run(“create-auth-realm”, “–classname=com.blah.blah.SecureJDBCRealm”, “–property=jaas-context= secureJDBCRealm”, “secure-JDBC-realm”);
log.debug(commandResult.getExitStatus().toString() + ” ” + commandResult.getOutput());
Throwable throwable = commandResult.getFailureCause();
if (throwable != null) {
log.error(throwable.getMessage(), throwable);
}
}
}
- 然后,您可以通过编程方式登录
ProgrammaticLogin pl = new ProgrammaticLogin();
String realmName = “secureJDBCRealm”;
try {
pl.login(“bob”, “bob”.toCharArray(), realmName, true);
} catch (Exception e){
e.printStackTrace();
} finally {
pl.logout();
}



