Я пытаюсь использовать Jaas, службу аутентификации и авторизации Java.
Сервер является App Engine, поэтому невозможно редактировать web.xml .
Я использую фильтр сервлетов, например:
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
try {
LoginContext lc = new LoginContext("JaasSample", new AuthenticationCallbackHandler());
lc.login();
chain.doFilter(request, response);
lc.logout();
} catch (LoginException e) { /* lc.login() fails */}
}
Вызов LoginContext проверяет политику и выдает следующее исключение:
java.security.AccessControlException:
access denied (javax.security.auth.AuthPermission createLoginContext.JaasSample)
Код, который я использую, взят из Ссылка на Oracle .
Они объясняют, что в присутствии диспетчера безопасности необходимо предоставить некоторые права следующим образом:
grant {
permission javax.security.auth.AuthPermission "createLoginContext.JaasSample";
}
Я просто не понимаю, почему это должно быть сделано в банке.
Я могу обойти эту проверку с помощью -D - enable_all_permissions = true в конфигурации запуска. (Но это должно быть решено, чтобы перейти в prod), а затем, файл конфигурации Jaas ищется в System.getProperty ("user.home") /. Java.login.config. Не лучше ли быть в ресурсах проектов? Как это может работать в местном / в производстве?
Файл конфигурации имеет вид:
JaasSample {
com.sun.security.auth.module.Krb5LoginModule required;
};
Большое спасибо.
пс. Spring Security можно использовать с Jaas и работает на App Engine.
имп. Spring Security нельзя использовать, потому что он запускает контекст Spring, который замедляет запуск App Engine. И запуск в этой среде происходит постоянно.