Где разместить файл конфигурации безопасности в WAR? - PullRequest
11 голосов
/ 12 декабря 2010

Я пытаюсь использовать JAAS для аутентификации в моей WAR. Я понимаю, что мой файл конфигурации ( другая ссылка ) должен быть где-то размещен (как объяснено здесь ). К сожалению, я не могу понять, где именно, если мы говорим о войне? А как назвать файл?

// JAAS has to find the file and retrieve "foo" from it
LoginContext ctx = new LoginContext("foo", this);

Ответы [ 3 ]

7 голосов
/ 19 июля 2012

У меня была такая же проблема, и я хотел посмотреть, не смогу ли я динамически установить это свойство на основе текущего пути к классам (который будет находиться внутри самой войны).

public class SecurityListener implements ServletContextListener {
    public SecurityListener() {
    }

    @Override
    public void contextDestroyed(ServletContextEvent arg0) {
    }

    @Override
    public void contextInitialized(ServletContextEvent arg0) {
        if(System.getProperty("java.security.auth.login.config") == null) {
            String jaasConfigFile = null;
            URL jaasConfigURL = this.getClass().getClassLoader().getResource("login.conf");
            if(jaasConfigURL != null) {
                jaasConfigFile = jaasConfigURL.getFile();
            }
            System.setProperty("java.security.auth.login.config", jaasConfigFile);
        }
    }
}

Очевидно, вынеобходимо добавить слушатель в ваш web.xml:

<listener>
    <listener-class>example.SecurityListener</listener-class>
</listener>

Для этого нужно установить свойство java.security.auth.login.config при создании экземпляра веб-приложения, если оноеще не было определено.Это означает, что вы можете выбросить его в исходную папку и загрузить его автоматически, если не указано иное, в другом месте.Я проверил это и он работает на Tomcat 6.

Так, например, если ваша установка tomcat была в "C: \ program files \ tomcat6 \", а ваша война развернута в "C: \ program files \ tomcat6"\ webapps \ mywar ", путь, который он найдет, будет" C: \ program files \ tomcat6 \ webapp \ mywar \ WEB-INF \ classes ", который всегда точен.Не уверен, что это решение также работает с другими веб-приложениями, но я думаю, что так, поскольку login.conf будет там, где находится корень пути к классам.

Надеюсь, это поможет!

6 голосов
/ 14 октября 2016

Вы можете инкапсулировать client_jaas.conf в jar-файл и использовать код для динамического определения конфигурации

System.setProperty("java.security.auth.login.config", XXX.class.getClassLoader().getResource("client_jaas.conf").toString());
2 голосов
/ 03 марта 2011

К сожалению, единственный способ заставить его работать - создать файл jass.conf и указать его с помощью:

  • В параметрах java Tomcat:

    -Djava.security.auth.login.config==c:\\path\\To\\file.conf
    
  • или из кода Java:

    System.setProperty("java.security.auth.login.config","c:\\path\\To\\file.conf");
    

Я также хотел бы узнать лучший способ указать конфигурацию.Я хочу упаковать эту конфигурацию в мою WAR.

...