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