@@ -61,9 +61,16 @@ else if (callback instanceof PasswordCallback) {
6161 SOAPMessage result = message .getSaajMessage ();
6262 assertNotNull ("No result returned" , result );
6363 assertXpathEvaluatesTo ("Invalid Username" , "Bert" ,
64- "/SOAP-ENV:Envelope/SOAP-ENV:Header/wsse:Security/wsse:UsernameToken/wsse:Username/text()" , result );
64+ "/SOAP-ENV:Envelope/SOAP-ENV:Header/wsse:Security/wsse:UsernameToken/wsse:Username/text()" ,
65+ result );
6566 assertXpathExists ("Password does not exist" ,
66- "/SOAP-ENV:Envelope/SOAP-ENV:Header/wsse:Security/wsse:UsernameToken/wsse:Password[@Type='http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordDigest']" ,
67+ "/SOAP-ENV:Envelope/SOAP-ENV:Header/wsse:Security/wsse:UsernameToken/wsse:Password[@Type='http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordDigest']" ,
68+ result );
69+ assertXpathExists ("Nonce does not exist" ,
70+ "/SOAP-ENV:Envelope/SOAP-ENV:Header/wsse:Security/wsse:UsernameToken/wsse:Nonce" ,
71+ result );
72+ assertXpathExists ("Created does not exist" ,
73+ "/SOAP-ENV:Envelope/SOAP-ENV:Header/wsse:Security/wsse:UsernameToken/wsu:Created" ,
6774 result );
6875 }
6976
@@ -100,6 +107,47 @@ else if (callback instanceof PasswordCallback) {
100107 }
101108
102109 @ Test
110+ public void testAddUsernameTokenPlainTextNonce () throws Exception {
111+ interceptor .setPolicyConfiguration (
112+ new ClassPathResource ("usernameToken-plainText-nonce-config.xml" ,
113+ getClass ()));
114+ CallbackHandler handler = new AbstractCallbackHandler () {
115+
116+ @ Override
117+ protected void handleInternal (Callback callback ) {
118+ if (callback instanceof UsernameCallback ) {
119+ ((UsernameCallback ) callback ).setUsername ("Bert" );
120+ }
121+ else if (callback instanceof PasswordCallback ) {
122+ PasswordCallback passwordCallback = (PasswordCallback ) callback ;
123+ passwordCallback .setPassword ("Ernie" );
124+ }
125+ else {
126+ fail ("Unexpected callback" );
127+ }
128+ }
129+ };
130+ interceptor .setCallbackHandler (handler );
131+ interceptor .afterPropertiesSet ();
132+ SaajSoapMessage message = loadSaajMessage ("empty-soap.xml" );
133+ interceptor .secureMessage (message , null );
134+ SOAPMessage result = message .getSaajMessage ();
135+ assertNotNull ("No result returned" , result );
136+ assertXpathEvaluatesTo ("Invalid Username" , "Bert" ,
137+ "/SOAP-ENV:Envelope/SOAP-ENV:Header/wsse:Security/wsse:UsernameToken/wsse:Username/text()" ,
138+ result );
139+ assertXpathEvaluatesTo ("Invalid Password" , "Ernie" ,
140+ "/SOAP-ENV:Envelope/SOAP-ENV:Header/wsse:Security/wsse:UsernameToken/wsse:Password[@Type='http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText']/text()" ,
141+ result );
142+ assertXpathExists ("Nonce does not exist" ,
143+ "/SOAP-ENV:Envelope/SOAP-ENV:Header/wsse:Security/wsse:UsernameToken/wsse:Nonce" ,
144+ result );
145+ assertXpathExists ("Created does not exist" ,
146+ "/SOAP-ENV:Envelope/SOAP-ENV:Header/wsse:Security/wsse:UsernameToken/wsu:Created" ,
147+ result );
148+ }
149+
150+ @ Test
103151 public void testValidateUsernameTokenPlainText () throws Exception {
104152 interceptor
105153 .setPolicyConfiguration (new ClassPathResource ("requireUsernameToken-plainText-config.xml" , getClass ()));
@@ -139,6 +187,53 @@ public boolean validate(PasswordValidationCallback.Request request) {
139187 assertXpathNotExists ("Security Header not removed" , "/SOAP-ENV:Envelope/SOAP-ENV:Header/wsse:Security" , result );
140188 }
141189
190+ @ Test
191+ public void testValidateUsernameTokenPlainTextNonce () throws Exception {
192+ interceptor
193+ .setPolicyConfiguration (new ClassPathResource ("requireUsernameToken-plainText-nonce-config.xml" , getClass ()));
194+ CallbackHandler handler = new AbstractCallbackHandler () {
195+
196+ @ Override
197+ protected void handleInternal (Callback callback ) {
198+ if (callback instanceof PasswordValidationCallback ) {
199+ PasswordValidationCallback validationCallback = (PasswordValidationCallback ) callback ;
200+ validationCallback .setValidator (new PasswordValidationCallback .PasswordValidator () {
201+ public boolean validate (PasswordValidationCallback .Request request ) {
202+ if (request instanceof PasswordValidationCallback .PlainTextPasswordRequest ) {
203+ PasswordValidationCallback .PlainTextPasswordRequest passwordRequest =
204+ (PasswordValidationCallback .PlainTextPasswordRequest ) request ;
205+ assertEquals ("Invalid username" , "Bert" , passwordRequest .getUsername ());
206+ assertEquals ("Invalid password" , "Ernie" , passwordRequest .getPassword ());
207+ return true ;
208+ }
209+ else {
210+ fail ("Unexpected request" );
211+ return false ;
212+ }
213+ }
214+ });
215+ }
216+ else if (callback instanceof TimestampValidationCallback ) {
217+ TimestampValidationCallback validationCallback = (TimestampValidationCallback ) callback ;
218+ validationCallback .setValidator (new TimestampValidationCallback .TimestampValidator () {
219+ public void validate (TimestampValidationCallback .Request request ) {
220+ }
221+ });
222+ }
223+ else {
224+ fail ("Unexpected callback" );
225+ }
226+ }
227+ };
228+ interceptor .setCallbackHandler (handler );
229+ interceptor .afterPropertiesSet ();
230+ SaajSoapMessage message = loadSaajMessage ("usernameTokenPlainText-nonce-soap.xml" );
231+ interceptor .validateMessage (message , null );
232+ SOAPMessage result = message .getSaajMessage ();
233+ assertNotNull ("No result returned" , result );
234+ assertXpathNotExists ("Security Header not removed" , "/SOAP-ENV:Envelope/SOAP-ENV:Header/wsse:Security" , result );
235+ }
236+
142237 @ Test
143238 public void testValidateUsernameTokenDigest () throws Exception {
144239 interceptor .setPolicyConfiguration (new ClassPathResource ("requireUsernameToken-digest-config.xml" , getClass ()));
0 commit comments