Я пытаюсь использовать службу Jaas, аутентификации и авторизации Java. Сервер - это App Engine, поэтому невозможно редактировать веб.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. Объясняют, что при наличии Security Manager необходимо дать некоторые права таким образом:
grant {
permission javax.security.auth.AuthPermission "createLoginContext.JaasSample";
}
Я просто не понимаю, зачем это делать в JAR.
Я могу обойти эту проверку с помощью -D--enable_all_permissions=true в Run Configuration. (Но это должно быть разрешено для перехода в 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. И стартап в этой среде делается постоянно.