2012-10-04 67 views
3

我在實現JAX-WS Web服務的授權時遇到了問題。我正在開發一個Swing應用程序,該應用程序可以通過JAX-WS Web服務連接到Java EE應用程序。用戶可以使用Swing應用程序登錄到服務器,並可以從服務器下載用戶特定的數據。記錄的用戶不能下載屬於其他用戶的數據是非常重要的。JAX-WS Web Service的身份驗證和授權的正確方法是什麼?

我的問題是jaxwsContext.getUserPrincipal().getName()返回「ANONYMOUS」。我在這個門戶上閱讀了類似的問題,但不幸的是它沒有幫助。

其實我有這樣的:

服務器端:

@Stateless 
@TransactionManagement(TransactionManagementType.CONTAINER) 
@SOAPBinding(style = SOAPBinding.Style.RPC) 
@WebService 
public class SampleWSEJB extends AbstractSampleEJB implements ISampleWSLocal, ISampleWSRemote { 

    @Resource 
    private WebServiceContext jaxwsContext; 

    public String getUsername() { 
     return username = jaxwsContext.getUserPrincipal().getName(); 
    } 

    @Override 
    @WebMethod 
    public UserDataVO logInUser() { 
     return SampleServerServices.getInstance().logInUser(getEm(), this.getUsername()); 
    } 

... 
... 

} 

客戶端:

我wsimport工具生成一些類(ImportedSampleWSEJB,UserDataVO等)

相關客戶代碼:

private static ImportedSampleWSEJB importedEJB; 

public UserDataVO logInUser(String username, String password) { 
    Map<String, Object> requestContext = ((BindingProvider)ImportedSampleWSEJB.importedEJB).getRequestContext(); 
    requestContext.put(BindingProvider.USERNAME_PROPERTY, username); 
    requestContext.put(BindingProvider.PASSWORD_PROPERTY, password); 
    return importedEJB.logInUser(); 
} 

我使用「文件」作爲安全領域,並且我在glassfish 3.1中創建了一些測試用戶。

任何人有任何想法如何解決它?

+0

這可能是相關的:http://stackoverflow.com/questions/10975070/how-to-enable-spring-security-for-apache-cxf-jax-ws。也看看Spring Security – amphibient

回答

0

您可以使用基本身份驗證(http頭),也可以使用UserName令牌(WS-安全性的一部分)。用戶名令牌將進入SOAP Header而不是http頭。