Как проверить логин / аутентификацию с помощью Arquillian-Java EE 7
У нас есть приложение Java EE 7 и использовать Arquillian для тестирования материала. Теперь мы хотим проверить некоторые разрешения текущего зарегистрированного пользователя. Мой вопрос довольно прост, как войти в систему пользователя, когда внутри testcase? Я читал ProgrammaticLogin не работает в arquillian тесты и встраиваемых приложений GlassFish, безопасности и Arquillian вопросы но на них нет четкого ответа. Мой нынешний подход примерно таков:--7-->
// 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();
}
}
теперь, когда я попробуйте запустить это, получить LoginException утверждая, что у меня нет LoginModule, настроенного для "fileRealm". Но "fileRealm" не мир я ищу (я положил его в первый раз, но потом я сменил его на "secureJDBCRealm", который наша таможня сфере безопасности для GlassFish). Мы используем arquillian-glassfish-embedded-3.1
для тестирования.
- кто-нибудь знает, где определить области для Arquillian?
- почему мое приложение продолжает искать fileRealm? Это по умолчанию ценность? (не удалось найти никаких спецификаций здесь)
1 ответов
Arquillian не предоставляет никакой поддержки для определения областей. Вместо этого вам нужно настроить область в контейнере самостоятельно. Это несколько сложно при использовании встроенного контейнера Glassfish, но это выполнимо.
Я предполагаю, что secureJDBCRealm
является пользовательской областью, а не одной из стандартных/встроенных областей Glassfish. Чтобы настроить пользовательскую область во встроенном контейнере Glassfish, вам необходимо:
-
место
login.conf
файл на тесте путь класса, который ссылается на область. Для этого добавьте в каталог config в каталог ресурсов и местаlogin.conf
внутри этой директории. Вашlogin.conf
будет выглядеть примерно такsecureJDBCRealm { com.blah.blah.LoginModule required; };
ваша пользовательская область вместе с любыми зависимостями должна быть на пути тестового класса.
-
вам нужно программно создать область в glassfish. Это можно сделать через org.в GlassFish.встраиваемый.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(); }