Как я могу симулировать / смоделировать / обойти управляемый вход в систему JEE6-контейнера? - PullRequest
3 голосов
/ 12 февраля 2012

Я использую аннотации безопасности JEE6 @RolesAllowed("Admin") и программный логин:

FacesContext context = FacesContext.getCurrentInstance();
HttpServletRequest request = (HttpServletRequest) context.getExternalContext().getRequest();
request.login(loginUser.getUserName(), loginUser.getPassword());

Однако для тестирования я хотел бы иметь возможность "симулировать" логин пользователя и обманутьприложение, в которое пользователь вошел, без фактического выполнения вышеуказанного кода.request.login(...) будет проверять контейнер для входа в систему, я просто хочу сообщить контейнеру, что пользователь foo вошел в систему, и нет необходимости проверять пароль.Я действительно не хочу решения, которое включает в себя написание модуля входа или изменение настроек всего контейнера.

Спасибо, ребята!

РЕДАКТИРОВАТЬ # 1: Какой сервер приложений я использую?

Я использую GlassFish 3.1.1.Однако, если возможно, я бы хотел, чтобы решение было «независимым от контейнера» с использованием любого доступного API JEE6.

РЕДАКТИРОВАТЬ # 2: Мистер Балус (известный эксперт) не знает ни о каком api-нейтральном способеминуя фактический логин.Я предположил, что мог бы написать свой собственный модуль входа в систему "Да-Человек", но мне любопытно, если кто-нибудь знает, как обойти ограничение, особенно в среде GlassFish.

Спасибо!

РЕДАКТИРОВАТЬ # 3: Для любого, кто найдет этот вопрос позже, я переключился на Apache Shiro.Я использовал Spring Security в прошлом, но это приложение излишне.

1 Ответ

1 голос
/ 13 февраля 2012

Для этого не предусмотрено API-интерфейса.Вы можете создать Filter, который проверяет определенный аргумент VM или переменную среды или даже переменную JNDI, а затем автоматически выполняет вход в систему.

Например:

String login = System.getProperty("development.login");

if (login != null && request.getRemoteUser() == null) {
    String[] nameAndPassword = login.split(":"); // Assuming "name:password".
    request.login(nameAndPassword[0], nameAndPassword[1]);
}
...