2011-01-11 15 views
6

Tôi cần phải cung cấp mật khẩu cho kho khóa trong EJB nhưng tôi không muốn nó hiển thị cho nhà phát triển. Ý tưởng của tôi là tạo Bí danh xác thực trong Bảng điều khiển Websphere và tìm kiếm MY_ALIAS sau đó và lấy mật khẩu từ bí danh. Tôi tìm thấy một số cuộc thảo luận liên quan đến chủ đề tại: http://www.coderanch.com/t/79439/Websphere/Authentication-DataCách truy cập bí danh xác thực từ EJB được triển khai tới Websphere 6.1

Có ai biết bí danh có thể được tra cứu không? Phương pháp được đề xuất của bạn để đạt được mục tiêu của tôi là gì?

Cảm ơn bạn rất nhiều!

Trả lời

6

Bạn có thể sử dụng đoạn mã sau để có được thông tin từ nhập dữ liệu xác thực J2C:

import com.ibm.wsspi.security.auth.callback.Constants; 
import com.ibm.wsspi.security.auth.callback.WSMappingCallbackHandlerFactory; 
import javax.resource.spi.security.PasswordCredential; 
import javax.security.auth.Subject; 
import javax.security.auth.callback.CallbackHandler; 
import javax.security.auth.login.LoginContext; 

Map map = new HashMap(); 
map.put(Constants.MAPPING_ALIAS, "YOUR_J2C_DATA_ALIAS"); 
CallbackHandler callbackHandler = WSMappingCallbackHandlerFactory.getInstance().getCallbackHandler(map, null); 

LoginContext loginContext = new LoginContext("DefaultPrincipalMapping", callbackHandler); 
loginContext.login(); 

Subject subject = loginContext.getSubject(); 
Set credentials = subject.getPrivateCredentials(); 

PasswordCredential passwordCredential = (PasswordCredential) credentials.iterator().next(); 

String user = passwordCredential.getUserName(); 
String password = new String(passwordCredential.getPassword()); 
+0

này làm việc như một nét duyên dáng! – Jay

+0

Tôi tự hỏi nếu có một cách để làm điều này mà không tham khảo các lớp Websphere cụ thể ('Constants' và' WSMappingCallbackHandlerFactory')? – FGreg

+0

@FGreg Tôi không nghĩ rằng điều này là có thể. Đó là những công cụ đặc trưng cho WAS nên bạn nên giả sử sử dụng một số lớp cụ thể. BTW, đây là một phần của API công cộng. Bạn có bất kỳ vấn đề sử dụng nó? – fnt