bmu*_*uer 8 java glassfish-embedded jboss-arquillian java-ee-7
我们有一个Java EE 7应用程序并使用Arquillian来测试东西.现在我们要检查当前登录用户的一些权限.我的问题很基本,如何在测试用例中登录用户?我读过ProgrammaticLogin在arquillian测试和嵌入式Glassfish,安全性和Arquillian问题上都没有用,但是没有明确回答.我目前的做法是这样的:
// Inject services etc.
@Test
public void testLogin(){
UserAccount user = new UserAccount();
user.setUsername("bob");
user.setPassword("bob");
userAccountService.save(user);
ProgrammaticLogin pl = new ProgrammaticLogin();
String realmName = "secureJDBCRealm";
try {
pl.login("bob", "bob".toCharArray(), realmName, true);
} catch (Exception e){
e.printStackTrace();
}
}
Run Code Online (Sandbox Code Playgroud)
现在当我尝试运行它时,得到一个LoginException,声称我没有为"fileRealm"配置LoginModule.但是"fileRealm"不是我正在寻找的领域(我把它放在那里进行第一次测试,但后来我将其改为"secureJDBCRealm",这是我们为GlassFish定制的安全领域).我们arquillian-glassfish-embedded-3.1用于测试.
Arquillian 不提供任何对定义领域的支持。相反,您需要自己在容器中配置领域。当使用嵌入式 Glassfish 容器时,这有点棘手,但它是可行的。
我假设这secureJDBCRealm是一个自定义领域,而不是标准/内置 Glassfish 领域之一。为了在嵌入式 Glassfish 容器中配置自定义领域,您需要:
将文件放置login.conf在引用领域的测试类路径上。为此,请将配置目录添加到资源目录中并将其放置login.conf在该目录中。你的login.conf会看起来像这样
secureJDBCRealm {
com.blah.blah.LoginModule required;
};
Run Code Online (Sandbox Code Playgroud)您的自定义领域以及任何依赖项都需要位于测试类路径上。
您需要以编程方式在 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);
}
}
Run Code Online (Sandbox Code Playgroud)
}
然后您可以通过编程方式登录
ProgrammaticLogin pl = new ProgrammaticLogin();
String realmName = "secureJDBCRealm";
try {
pl.login("bob", "bob".toCharArray(), realmName, true);
} catch (Exception e){
e.printStackTrace();
} finally {
pl.logout();
}
Run Code Online (Sandbox Code Playgroud)| 归档时间: |
|
| 查看次数: |
1541 次 |
| 最近记录: |