2010-07-15 88 views
0

我試圖插入用戶憑證到一個HTTP請求頭,然後通過HTTPS發送給Web服務,這反過來讀取它們的授權目的...插入用戶憑證

客戶端和服務都是用Java編寫的。

在客戶端我做到以下幾點:

ExampleImplService service = new ExampleImplService(); 
Example port = service.getExampleImplPort(); 

Map<String, Object> reqContext = ((BindingProvider) port).getRequestContext(); 
Map<String, List<String>> reqHeader = new HashMap<String, List<String>>(); 
reqHeader.put("Username", Collections.singletonList("user")); 
reqHeader.put("Password", Collections.singletonList("password")); 
reqContext.put(MessageContext.HTTP_REQUEST_HEADERS, reqHeader); 

System.out.println(port.somemethod()); 

如果我轉儲reqContext我補充程序後,我看到添加的報頭。但通過tcpmon,我可以看到,它們不會發送到Web服務......當然,我也無法在Web服務的任何地方找到它們。

任何想法我做錯了什麼?

回答

1

我相信你正在使用的Web服務消費JAX-WS所以我的答案會導向,以它

如果還是不行,您可以這樣設置

reqContext.put(BindingProvider.USERNAME_PROPERTY, "user"); 
reqContext.put(BindingProvider.PASSWORD_PROPERTY, "password"); 

的用戶名和密碼屬性工作中,你可能需要一個驗證器(不使用Axis2工作)

here

複製
class MyAuthenticator extends Authenticator { 
    private String username, password; 

    public MyAuthenticator(String user, String pass) { 
     username = user; 
     password = pass; 
     setDefault(this); 
    } 

    protected PasswordAuthentication getPasswordAuthentication() { 
     System.out.println("Requesting Host : " + getRequestingHost()); 
     System.out.println("Requesting Port : " + getRequestingPort()); 
     System.out.println("Requesting Prompt : " + getRequestingPrompt()); 
     System.out.println("Requesting Protocol: " + getRequestingProtocol()); 
     System.out.println("Requesting Scheme : " + getRequestingScheme()); 
     System.out.println("Requesting Site : " + getRequestingSite()); 

     return new PasswordAuthentication(username, password.toCharArray()); 
    } 
}