Где разместить файл конфигурации безопасности в WAR?

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

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

Ответ 1

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

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 будет там, где находится корневой каталог.

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

Ответ 2

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

System.setProperty("java.security.auth.login.config", XXX.class.getClassLoader().getResource("client_jaas.conf").toString());

Ответ 3

К сожалению, единственный способ заставить его работать - создать файл 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.