2016-08-13 12 views
0

私は現在の構造でヘッダを送信する場合:processSecurityHeader方法が正しい介しwss4j 1.6でパスワードなしでUsernameTokenを検証する方法は?

<soapenv:Header> 
     <wsse:Security 
       xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" 
       xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" 
       soapenv:mustUnderstand="1"> 
      <wsse:UsernameToken wsu:Id="UsernameToken-E9505BCB2A7771EF1F14710742072404"> 
       <wsse:Username>Not_correct_username</wsse:Username> 
      </wsse:UsernameToken> 
     </wsse:Security> 
    </soapenv:Header> 

検証を行います。しかし、ユーザー名のみでユーザーを認証する必要があります。

今私のCallbackHandlerコードは次のとおりです。

public class PWCallback implements CallbackHandler { 
private String user; 
private String password; 
private String alias; 
private String privateKeyPassword; 

@Override 
public void handle(Callback[] callbacks) throws IOException, UnsupportedCallbackException { 
    for (int i = 0; i < callbacks.length; i++) { 

     if (callbacks[i] instanceof WSPasswordCallback) { 
      WSPasswordCallback pc = (WSPasswordCallback) callbacks[i]; 


      if (pc.getUsage() == WSPasswordCallback.USERNAME_TOKEN) { 
       if (!StringUtils.equals(user, pc.getIdentifier())) { 
        throw new IOException("unknown user: " + pc.getIdentifier()); 
       } 
       pc.setPassword(password); 

      } else { 

       if (pc.getUsage() == WSPasswordCallback.SIGNATURE || pc.getUsage() == WSPasswordCallback.DECRYPT) { 
        if (StringUtils.equals(pc.getIdentifier(), alias)) { 
         pc.setPassword(privateKeyPassword); 
        } else throw new IOException("unknown user: " + pc.getIdentifier()); 
       } 

      } 

     } 
    } 
} 

私は追加または削除する必要がありますか?

答えて

0

代わりにCallbackHandlerを呼び出すには、デフォルトのUsernameTokenValidatorの「verifyUnknownPassword」メソッドをオーバーライドする必要があります。

関連する問題