1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.springframework.ws.soap.security.xwss.callback;
18
19 import java.io.IOException;
20 import javax.security.auth.callback.Callback;
21 import javax.security.auth.callback.UnsupportedCallbackException;
22
23 import com.sun.xml.wss.impl.callback.CertificateValidationCallback;
24 import com.sun.xml.wss.impl.callback.DecryptionKeyCallback;
25 import com.sun.xml.wss.impl.callback.EncryptionKeyCallback;
26 import com.sun.xml.wss.impl.callback.SignatureKeyCallback;
27 import com.sun.xml.wss.impl.callback.SignatureVerificationKeyCallback;
28
29 import org.springframework.ws.soap.security.callback.AbstractCallbackHandler;
30
31
32
33
34
35
36
37
38
39 public class CryptographyCallbackHandler extends AbstractCallbackHandler {
40
41 protected final void handleInternal(Callback callback) throws IOException, UnsupportedCallbackException {
42 if (callback instanceof CertificateValidationCallback) {
43 handleCertificateValidationCallback((CertificateValidationCallback) callback);
44 }
45 else if (callback instanceof DecryptionKeyCallback) {
46 handleDecryptionKeyCallback((DecryptionKeyCallback) callback);
47 }
48 else if (callback instanceof EncryptionKeyCallback) {
49 handleEncryptionKeyCallback((EncryptionKeyCallback) callback);
50 }
51 else if (callback instanceof SignatureKeyCallback) {
52 handleSignatureKeyCallback((SignatureKeyCallback) callback);
53 }
54 else if (callback instanceof SignatureVerificationKeyCallback) {
55 handleSignatureVerificationKeyCallback((SignatureVerificationKeyCallback) callback);
56 }
57 else {
58 throw new UnsupportedCallbackException(callback);
59 }
60
61 }
62
63
64
65
66
67
68
69
70
71 protected void handleCertificateValidationCallback(CertificateValidationCallback callback)
72 throws IOException, UnsupportedCallbackException {
73 throw new UnsupportedCallbackException(callback);
74 }
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89 protected final void handleDecryptionKeyCallback(DecryptionKeyCallback callback)
90 throws IOException, UnsupportedCallbackException {
91 if (callback.getRequest() instanceof DecryptionKeyCallback.PrivateKeyRequest) {
92 handlePrivateKeyRequest(callback, (DecryptionKeyCallback.PrivateKeyRequest) callback.getRequest());
93 }
94 else if (callback.getRequest() instanceof DecryptionKeyCallback.SymmetricKeyRequest) {
95 handleSymmetricKeyRequest(callback, (DecryptionKeyCallback.SymmetricKeyRequest) callback.getRequest());
96 }
97 else {
98 throw new UnsupportedCallbackException(callback);
99 }
100 }
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115 protected final void handlePrivateKeyRequest(DecryptionKeyCallback callback,
116 DecryptionKeyCallback.PrivateKeyRequest request)
117 throws IOException, UnsupportedCallbackException {
118 if (request instanceof DecryptionKeyCallback.PublicKeyBasedPrivKeyRequest) {
119 handlePublicKeyBasedPrivKeyRequest(callback, (DecryptionKeyCallback.PublicKeyBasedPrivKeyRequest) request);
120 }
121 else if (request instanceof DecryptionKeyCallback.X509CertificateBasedRequest) {
122 handleX509CertificateBasedRequest(callback, (DecryptionKeyCallback.X509CertificateBasedRequest) request);
123 }
124 else if (request instanceof DecryptionKeyCallback.X509IssuerSerialBasedRequest) {
125 handleX509IssuerSerialBasedRequest(callback, (DecryptionKeyCallback.X509IssuerSerialBasedRequest) request);
126 }
127 else if (request instanceof DecryptionKeyCallback.X509SubjectKeyIdentifierBasedRequest) {
128 handleX509SubjectKeyIdentifierBasedRequest(callback,
129 (DecryptionKeyCallback.X509SubjectKeyIdentifierBasedRequest) request);
130 }
131 else {
132 throw new UnsupportedCallbackException(callback);
133 }
134 }
135
136
137
138
139
140
141 protected void handlePublicKeyBasedPrivKeyRequest(DecryptionKeyCallback callback,
142 DecryptionKeyCallback.PublicKeyBasedPrivKeyRequest request)
143 throws IOException, UnsupportedCallbackException {
144 throw new UnsupportedCallbackException(callback);
145 }
146
147
148
149
150
151
152 protected void handleX509CertificateBasedRequest(DecryptionKeyCallback callback,
153 DecryptionKeyCallback.X509CertificateBasedRequest request)
154 throws IOException, UnsupportedCallbackException {
155 throw new UnsupportedCallbackException(callback);
156 }
157
158
159
160
161
162
163 protected void handleX509IssuerSerialBasedRequest(DecryptionKeyCallback callback,
164 DecryptionKeyCallback.X509IssuerSerialBasedRequest request)
165 throws IOException, UnsupportedCallbackException {
166 throw new UnsupportedCallbackException(callback);
167 }
168
169
170
171
172
173
174 protected void handleX509SubjectKeyIdentifierBasedRequest(DecryptionKeyCallback callback,
175 DecryptionKeyCallback.X509SubjectKeyIdentifierBasedRequest request)
176 throws IOException, UnsupportedCallbackException {
177 throw new UnsupportedCallbackException(callback);
178 }
179
180
181
182
183
184
185
186
187 protected final void handleSymmetricKeyRequest(DecryptionKeyCallback callback,
188 DecryptionKeyCallback.SymmetricKeyRequest request)
189 throws IOException, UnsupportedCallbackException {
190 if (request instanceof DecryptionKeyCallback.AliasSymmetricKeyRequest) {
191 DecryptionKeyCallback.AliasSymmetricKeyRequest aliasSymmetricKeyRequest =
192 (DecryptionKeyCallback.AliasSymmetricKeyRequest) request;
193 handleAliasSymmetricKeyRequest(callback, aliasSymmetricKeyRequest);
194 }
195 else {
196 throw new UnsupportedCallbackException(callback);
197 }
198 }
199
200
201
202
203
204
205 protected void handleAliasSymmetricKeyRequest(DecryptionKeyCallback callback,
206 DecryptionKeyCallback.AliasSymmetricKeyRequest request)
207 throws IOException, UnsupportedCallbackException {
208 throw new UnsupportedCallbackException(callback);
209 }
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224 protected final void handleEncryptionKeyCallback(EncryptionKeyCallback callback)
225 throws IOException, UnsupportedCallbackException {
226 if (callback.getRequest() instanceof EncryptionKeyCallback.SymmetricKeyRequest) {
227 handleSymmetricKeyRequest(callback, (EncryptionKeyCallback.SymmetricKeyRequest) callback.getRequest());
228 }
229 else if (callback.getRequest() instanceof EncryptionKeyCallback.X509CertificateRequest) {
230 handleX509CertificateRequest(callback,
231 (EncryptionKeyCallback.X509CertificateRequest) callback.getRequest());
232 }
233 else {
234 throw new UnsupportedCallbackException(callback);
235
236 }
237 }
238
239
240
241
242
243
244
245
246 protected final void handleSymmetricKeyRequest(EncryptionKeyCallback callback,
247 EncryptionKeyCallback.SymmetricKeyRequest request)
248 throws IOException, UnsupportedCallbackException {
249 if (request instanceof EncryptionKeyCallback.AliasSymmetricKeyRequest) {
250 handleAliasSymmetricKeyRequest(callback, (EncryptionKeyCallback.AliasSymmetricKeyRequest) request);
251 }
252 }
253
254
255
256
257
258
259 protected void handleAliasSymmetricKeyRequest(EncryptionKeyCallback callback,
260 EncryptionKeyCallback.AliasSymmetricKeyRequest request)
261 throws IOException, UnsupportedCallbackException {
262 throw new UnsupportedCallbackException(callback);
263 }
264
265
266
267
268
269
270
271
272
273
274
275
276 protected final void handleX509CertificateRequest(EncryptionKeyCallback callback,
277 EncryptionKeyCallback.X509CertificateRequest request)
278 throws IOException, UnsupportedCallbackException {
279 if (request instanceof EncryptionKeyCallback.AliasX509CertificateRequest) {
280 handleAliasX509CertificateRequest(callback, (EncryptionKeyCallback.AliasX509CertificateRequest) request);
281 }
282 else if (request instanceof EncryptionKeyCallback.DefaultX509CertificateRequest) {
283 handleDefaultX509CertificateRequest(callback,
284 (EncryptionKeyCallback.DefaultX509CertificateRequest) request);
285 }
286 else if (request instanceof EncryptionKeyCallback.PublicKeyBasedRequest) {
287 handlePublicKeyBasedRequest(callback, (EncryptionKeyCallback.PublicKeyBasedRequest) request);
288 }
289 else {
290 throw new UnsupportedCallbackException(callback);
291 }
292 }
293
294
295
296
297
298
299 protected void handleAliasX509CertificateRequest(EncryptionKeyCallback callback,
300 EncryptionKeyCallback.AliasX509CertificateRequest request)
301 throws IOException, UnsupportedCallbackException {
302 throw new UnsupportedCallbackException(callback);
303 }
304
305
306
307
308
309
310 protected void handleDefaultX509CertificateRequest(EncryptionKeyCallback callback,
311 EncryptionKeyCallback.DefaultX509CertificateRequest request)
312 throws IOException, UnsupportedCallbackException {
313 throw new UnsupportedCallbackException(callback);
314 }
315
316
317
318
319
320
321 protected void handlePublicKeyBasedRequest(EncryptionKeyCallback callback,
322 EncryptionKeyCallback.PublicKeyBasedRequest request)
323 throws IOException, UnsupportedCallbackException {
324 throw new UnsupportedCallbackException(callback);
325 }
326
327
328
329
330
331
332
333
334
335
336
337
338 protected final void handleSignatureKeyCallback(SignatureKeyCallback callback)
339 throws IOException, UnsupportedCallbackException {
340 if (callback.getRequest() instanceof SignatureKeyCallback.PrivKeyCertRequest) {
341 handlePrivKeyCertRequest(callback, (SignatureKeyCallback.PrivKeyCertRequest) callback.getRequest());
342 }
343 else {
344 throw new UnsupportedCallbackException(callback);
345 }
346 }
347
348
349
350
351
352
353
354
355
356
357
358
359 protected final void handlePrivKeyCertRequest(SignatureKeyCallback cb,
360 SignatureKeyCallback.PrivKeyCertRequest request)
361 throws IOException, UnsupportedCallbackException {
362 if (request instanceof SignatureKeyCallback.DefaultPrivKeyCertRequest) {
363 handleDefaultPrivKeyCertRequest(cb, (SignatureKeyCallback.DefaultPrivKeyCertRequest) request);
364 }
365 else if (cb.getRequest() instanceof SignatureKeyCallback.AliasPrivKeyCertRequest) {
366 handleAliasPrivKeyCertRequest(cb, (SignatureKeyCallback.AliasPrivKeyCertRequest) request);
367 }
368 else if (cb.getRequest() instanceof SignatureKeyCallback.PublicKeyBasedPrivKeyCertRequest) {
369 handlePublicKeyBasedPrivKeyCertRequest(cb, (SignatureKeyCallback.PublicKeyBasedPrivKeyCertRequest) request);
370 }
371 else {
372 throw new UnsupportedCallbackException(cb);
373 }
374 }
375
376
377
378
379
380
381 protected void handleDefaultPrivKeyCertRequest(SignatureKeyCallback callback,
382 SignatureKeyCallback.DefaultPrivKeyCertRequest request)
383 throws IOException, UnsupportedCallbackException {
384 throw new UnsupportedCallbackException(callback);
385 }
386
387
388
389
390
391
392 protected void handleAliasPrivKeyCertRequest(SignatureKeyCallback callback,
393 SignatureKeyCallback.AliasPrivKeyCertRequest request)
394 throws IOException, UnsupportedCallbackException {
395 throw new UnsupportedCallbackException(callback);
396 }
397
398
399
400
401
402
403 protected void handlePublicKeyBasedPrivKeyCertRequest(SignatureKeyCallback callback,
404 SignatureKeyCallback.PublicKeyBasedPrivKeyCertRequest request)
405 throws IOException, UnsupportedCallbackException {
406 throw new UnsupportedCallbackException(callback);
407 }
408
409
410
411
412
413
414
415
416
417
418
419
420 protected final void handleSignatureVerificationKeyCallback(SignatureVerificationKeyCallback callback)
421 throws UnsupportedCallbackException, IOException {
422 if (callback.getRequest() instanceof SignatureVerificationKeyCallback.X509CertificateRequest) {
423 handleX509CertificateRequest(callback,
424 (SignatureVerificationKeyCallback.X509CertificateRequest) callback.getRequest());
425 }
426 else {
427 throw new UnsupportedCallbackException(callback);
428 }
429 }
430
431
432
433
434
435
436
437
438
439
440
441
442
443 protected final void handleX509CertificateRequest(SignatureVerificationKeyCallback callback,
444 SignatureVerificationKeyCallback.X509CertificateRequest request)
445 throws UnsupportedCallbackException, IOException {
446 if (request instanceof SignatureVerificationKeyCallback.PublicKeyBasedRequest) {
447 handlePublicKeyBasedRequest(callback, (SignatureVerificationKeyCallback.PublicKeyBasedRequest) request);
448 }
449 else if (request instanceof SignatureVerificationKeyCallback.X509IssuerSerialBasedRequest) {
450 handleX509IssuerSerialBasedRequest(callback,
451 (SignatureVerificationKeyCallback.X509IssuerSerialBasedRequest) request);
452 }
453 else if (request instanceof SignatureVerificationKeyCallback.X509SubjectKeyIdentifierBasedRequest) {
454 handleX509SubjectKeyIdentifierBasedRequest(callback,
455 (SignatureVerificationKeyCallback.X509SubjectKeyIdentifierBasedRequest) request);
456 }
457 else {
458 throw new UnsupportedCallbackException(callback);
459 }
460 }
461
462
463
464
465
466
467 protected void handleX509SubjectKeyIdentifierBasedRequest(SignatureVerificationKeyCallback callback,
468 SignatureVerificationKeyCallback.X509SubjectKeyIdentifierBasedRequest request)
469 throws IOException, UnsupportedCallbackException {
470 throw new UnsupportedCallbackException(callback);
471 }
472
473
474
475
476
477
478 protected void handleX509IssuerSerialBasedRequest(SignatureVerificationKeyCallback callback,
479 SignatureVerificationKeyCallback.X509IssuerSerialBasedRequest request)
480 throws IOException, UnsupportedCallbackException {
481 throw new UnsupportedCallbackException(callback);
482 }
483
484
485
486
487
488
489 protected void handlePublicKeyBasedRequest(SignatureVerificationKeyCallback callback,
490 SignatureVerificationKeyCallback.PublicKeyBasedRequest request)
491 throws IOException, UnsupportedCallbackException {
492 throw new UnsupportedCallbackException(callback);
493 }
494 }