Я перестал верить что смогу как-то это замутить без контейнера, так что теперь котейнер приложений/серверов допускаю
Есть экземляр POJO, который реализует мой интерфейс. Надо получить к нему удаленный доступ с автентификацией. Требования
- Authentication по логину и паролю
- После успешного логина у пользователя есть роль, которая используется для method level authentication с помощью аннотаций
- логины, пароли, роли лежат в бд
- переносимо между контейнерами. Вот тут основная проблема. Гугол дает статьи, где надо возиться в realms, а это контейнеро-специфичная фича. Хотелось бы вообще контейнер никак не конфигурировать, приложение должно деплоится без доп.конфигов.
Предыдущие решения
- Spring, http invoker. Описал как решил здесь. Все бы ничего, только там логин происходит в глобальный сферический контекст в вакууме. Тоесть всем юзерам открывается доступ на уровне первого залогиневшегося.
if (SecurityContextHolder.getContext().getAuthentication() == null) { Authentication request = new UsernamePasswordAuthenticationToken(username, password); Authentication result = getAuthenticationManager().authenticate(request); SecurityContextHolder.getContext().setAuthentication(result); return true; } else { return true; }
Если убрать проверку на null, то логин происходит с каждым запросом. Это работает, но это рулетка, логин все равно общий - значит идиотизм и отпадает.
- JAX-WS. Это счастье совсем непонятно как пропустить через автентификацию на уровне приложения. Нужно конфигурячить контейнер и каждый раз по-разному. Может проблему поможет решить Spring? Пока не могу нагуглить как это делается с учетом ВСЕХ требований вверху.
- EJB. Еще не пробовал, тяжелая артиллерия. А больше никак?