2015-12-14 25 views
6

Tôi có một ứng dụng web java sử dụng Spring MVC. webapp đang chạy trên máy chủ jboss AS7.1 sử dụng mô-đun đăng nhập JAAS có xác thực biểu mẫu. Đăng nhập hoạt động trơn tru khi người dùng điền vào tên người dùng và mật khẩu của mình trên biểu mẫu.Tự động đăng nhập JAAS mà không cần hiển thị trang/mẫu đăng nhập

Tôi muốn tạo bộ điều khiển java "ghi nhật ký người dùng vào" như thể người dùng đã điền vào biểu mẫu đăng nhập.

public void logInProgrammatically(String username, string password) 
{ 
    //??? 
} 

Khi các phương pháp trên kết thúc, bất kỳ truy cập vào bất kỳ trang nào bảo đảm nên được cho phép bởi vì người dùng sẽ được coi là đăng nhập.

này có thể được lập trình bằng cách truy cập thực hiện LoginModule Jboss, và thiết lập một số tài sản ?

+0

Tôi có thể hỏi bạn đang cố giải quyết vấn đề chính xác nào? –

Trả lời

0

WebAuthentication từ Jboss cung cấp chức năng mong muốn gần như ra khỏi hộp. Ý tưởng là bạn có thể tạo servlet hoặc lớp tùy chỉnh của riêng bạn, như được trình bày here có thể gọi trực tiếp với một số userpassword được chỉ định.

Tức là. trong bạn logInProgrammatically bạn có thể có một cái gì đó tương tự như những gì đã được thực hiện trong LoginHandler giới here:

public void logInProgrammatically(String username, string password) 
{ 
    // ... 
    WebAuthentication webA = new WebAuthentication(); 
    webA.login(username, password); 
    // ... 
} 
+0

Lớp Webauthentication không có trong JBOSS7. Nó có sẵn trong các phiên bản jboss cũ hơn. Tôi không chắc tại sao nó lại bị xóa. Có cách nào khác không? – user1884155

+0

@ user1884155 Như đã đề cập trong nhận xét về câu hỏi khác của bạn. Bạn có thể sử dụng 'Servlet3AuthenticationFilter', sử dụng thông số đăng nhập 'Servlet 3'. – dan

0

Bạn có thể sử dụng các lớp chuẩn JAAS để đạt được thẩm định chương trình khác. Cho phép nói rằng chúng tôi đang sử dụng triển khai LoginModule tùy chỉnh của chúng tôi (hoặc bất kỳ triển khai chuẩn nào), com.sample.CustomLoginModule. Mô-đun đăng nhập này được cấu hình trong cấu hình jboss XML.

Bước 1: Xác định miền bảo mật trong JBoss. Đối với các máy chủ khác, thông tin tương tự có thể được cấu hình trong cấu hình JAAS.

<security-domain name="customlogin" cache-type="default"> 
    <authentication> 
     <login-module code="com.sample.CustomLoginModule" flag="required"> 
     </login-module> 
    </authentication> 
</security-domain> 

Bước 2: Sử dụng mô-đun đăng nhập tùy chỉnh để đăng nhập người dùng theo chương trình.

public void logInProgrammatically(String username, string password){ 
    CallbackHandler handler = //use proper implementation to capture username and password arguments. 
    LoginContext ctx = new LoginContext("customlogin", handler); 
    ctx.login(); 

}

Với giải pháp này, bạn không bị ràng buộc để các API máy chủ ứng dụng cụ thể. Mã này được di chuyển trên bất kỳ máy chủ ứng dụng nào có thay đổi cấu hình JAAS.

Đối programatically xác thực bằng JAAS, vui lòng xem hướng dẫn từ Oracle: http://docs.oracle.com/javase/7/docs/technotes/guides/security/jaas/tutorials/GeneralAcnOnly.html

+0

Điều này không hoạt động vì mặc dù tôi đã đăng nhập trong ngữ cảnh, thùng chứa JBOSS không nhận thức được thực tế này. Như vậy, nó sẽ ngăn chặn truy cập vào các trang được bảo mật và hiển thị màn hình đăng nhập. Tại sao điều này? Những gì ma thuật (yêu cầu) tài sản không jboss thấy/sử dụng bối cảnh đăng nhập không thiết lập/sử dụng? – user1884155

Các vấn đề liên quan