Джаасу нужна политика Java, я не знаю, как ее предоставить

Я пытаюсь использовать службу 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. И стартап в этой среде делается постоянно.


person yves amsellem    schedule 15.03.2011    source источник


Ответы (2)


Используйте policytool из каталога $JAVA_HOME/bin, чтобы предоставить разрешение.

person Amit    schedule 15.03.2011
comment
Я не понимаю, почему это файл политики пользователя, а не файл политики проекта. Как применить эту политику к одному из моих проектов? - person yves amsellem; 16.03.2011

Проблема существует исключительно в режиме разработки App Engine; после доставки их нет такого исключения.

Таким образом, достаточно использовать -D--enable_all_permissions=true в Run Configuration.

person yves amsellem    schedule 16.03.2011