Ответ 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 будет там, где находится корневой каталог.
Надеюсь, что это поможет!