2010-12-12 23 views
10

Tôi đang cố gắng sử dụng JAAS để xác thực trong WAR của tôi. Tôi hiểu rằng configuration file (another link) của tôi nên được đặt ở đâu đó (như được giải thích here). Thật không may, tôi không thể hiểu chính xác, nếu chúng ta đang nói về WAR? Và làm thế nào để đặt tên cho tập tin?Nơi đặt tệp cấu hình bảo mật trong WAR?

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

Trả lời

2

Đáng tiếc là cách duy nhất tôi đã có thể để làm cho nó hoạt động là tạo ra một tập tin jass.conf và xác định nó bằng cách sử dụng:

  • Trong các thông số java Tomcat:

    -Djava.security.auth.login.config==c:\\path\\To\\file.conf 
    
  • hoặc từ bên trong mã Java:

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

Tôi cũng muốn biết cách tốt hơn để chỉ định cấu hình. Tôi muốn đóng gói cấu hình đó trong WAR của tôi.

+0

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

+0

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

6

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!

+0

Trông giống như một giải pháp ngọt ngào – sehe

4

Bạn có thể đóng gói các client_jaas.conf trong jar, và sử dụng mã để xác định cấu hình tự động

System.setProperty("java.security.auth.login.config", XXX.class.getClassLoader().getResource("client_jaas.conf").toString()); 
Các vấn đề liên quan