1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.openehealth.ipf.commons.ihe.ws.cxf.audit;
17
18 import org.apache.cxf.binding.soap.SoapMessage;
19 import org.apache.cxf.headers.Header;
20 import org.apache.cxf.wsdl.interceptors.DocLiteralInInterceptor;
21 import org.apache.cxf.phase.Phase;
22 import org.openehealth.ipf.commons.audit.AuditContext;
23 import org.openehealth.ipf.commons.ihe.core.atna.AuditStrategy;
24 import org.openehealth.ipf.commons.ihe.ws.WsTransactionConfiguration;
25 import org.openehealth.ipf.commons.ihe.ws.cxf.payload.StringPayloadHolder;
26
27
28
29
30
31
32
33
34 public class AuditInRequestInterceptor<T extends WsAuditDataset> extends AbstractAuditInterceptor<T> {
35
36 private final WsTransactionConfiguration<T> wsTransactionConfiguration;
37
38
39
40
41 public AuditInRequestInterceptor(AuditStrategy<T> auditStrategy, AuditContext auditContext, WsTransactionConfiguration<T> wsTransactionConfiguration) {
42 super(Phase.UNMARSHAL, auditStrategy, auditContext);
43 addAfter(DocLiteralInInterceptor.class.getName());
44 this.wsTransactionConfiguration = wsTransactionConfiguration;
45 }
46
47
48 @Override
49 protected void process(SoapMessage message) {
50 if (isGET(message)) {
51 return;
52 }
53
54 T auditDataset = getAuditDataset(message);
55 extractAddressesFromServletRequest(message, auditDataset);
56 extractXuaUserNameFromSaml2Assertion(message, Header.Direction.DIRECTION_IN, auditDataset);
57
58 extractClientCertificateCommonName(message, auditDataset);
59
60 if (wsTransactionConfiguration.isAuditRequestPayload()) {
61 auditDataset.setRequestPayload(message.getContent(StringPayloadHolder.class));
62 }
63
64 getAuditStrategy().enrichAuditDatasetFromRequest(auditDataset, extractPojo(message), message);
65 }
66
67 }