Tôi gặp vấn đề tương tự và tôi muốn xem liệu tôi có thể tự động đặt thuộc tính này dựa trên classpath hiện tại (nằm trong chính chiến tranh) hay không.
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);
}
}
}
Rõ ràng, bạn cần phải thêm người nghe để web.xml của bạn:
<listener>
<listener-class>example.SecurityListener</listener-class>
</listener>
Điều này không được thiết lập thuộc tính java.security.auth.login.config khi instantiation của ứng dụng web nếu nó chưa được xác định. Điều này có nghĩa là bạn có thể ném nó vào thư mục nguồn của bạn và tải nó tự động nếu không được định nghĩa lại ở nơi khác. Tôi đã thử nghiệm điều này và nó hoạt động trên Tomcat 6.
Vì vậy, ví dụ: nếu cài đặt tomcat của bạn nằm trong "C: \ program files \ tomcat6 \" với chiến dịch được triển khai trong "C: \ program files \ tomcat6 \ webapps \ mywar ", đường dẫn nó sẽ tìm thấy sẽ là" C: \ chương trình tập tin \ tomcat6 \ webapp \ mywar \ WEB-INF \ lớp học "mà luôn luôn là chính xác. Không chắc chắn nếu giải pháp này cũng làm việc với các ứng dụng web khác, nhưng tôi sẽ tưởng tượng như vậy kể từ khi login.conf sẽ là nơi gốc classpath là.
Hy vọng điều đó sẽ hữu ích!
tốt, đó là một lựa chọn. Có lẽ chúng ta có thể đặt tham số 'java.security.auth.login.config' này ở đâu đó trong tệp' .properties' bên trong WAR? Trong trường hợp của bạn, cài đặt này sẽ là toàn cầu cho tất cả các ứng dụng trong Tomcat. – yegor256
bạn có tìm cách giới thiệu tệp .conf được đặt bên trong tệp WAR của bạn không? – yathirigan