Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 7cddebb

Browse files
committed
10_1_HW9_handlers
1 parent 2f2affc commit 7cddebb

File tree

9 files changed

+109
-13
lines changed

9 files changed

+109
-13
lines changed

services/common-ws/src/main/java/ru/javaops/masterjava/web/WsClient.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ public WsClient(URL wsdlUrl, QName qname, Class<T> serviceClass) {
3131
}
3232

3333
public void init(String host, String endpointAddress) {
34-
this.endpointAddress = HOSTS.getString(host) + endpointAddress;
34+
this.endpointAddress = HOSTS.getConfig(host).getString("endpoint") + endpointAddress;
3535
}
3636

3737
// Post is not thread-safe (http://stackoverflow.com/a/10601916/548473)

services/common-ws/src/main/java/ru/javaops/masterjava/web/handler/SoapBaseHandler.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99

1010
public abstract class SoapBaseHandler implements MessageHandler<MessageHandlerContext> {
1111

12+
@Override
1213
public Set<QName> getHeaders() {
1314
return null;
1415
}

services/common-ws/src/main/java/ru/javaops/masterjava/web/handler/SoapLoggingHandlers.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,31 +56,37 @@ public void handleMessage(MessageHandlerContext mhc, boolean isRequest) {
5656
ERROR {
5757
private static final String REQUEST_MSG = "REQUEST_MSG";
5858

59+
@Override
5960
public void handleFault(MessageHandlerContext context) {
6061
log.error("Fault SOAP request:\n" + getMessageText(((Message) context.get(REQUEST_MSG))));
6162
}
6263

64+
@Override
6365
public void handleMessage(MessageHandlerContext context, boolean isRequest) {
6466
if (isRequest) {
6567
context.put(REQUEST_MSG, context.getMessage().copy());
6668
}
6769
}
6870
},
6971
INFO {
72+
@Override
7073
public void handleFault(MessageHandlerContext context) {
7174
ERROR.handleFault(context);
7275
}
7376

77+
@Override
7478
public void handleMessage(MessageHandlerContext context, boolean isRequest) {
7579
ERROR.handleMessage(context, isRequest);
7680
log.info((isRequest ? "SOAP request: " : "SOAP response: ") + context.getMessage().getPayloadLocalPart());
7781
}
7882
},
7983
DEBUG {
84+
@Override
8085
public void handleFault(MessageHandlerContext context) {
8186
log.error("Fault SOAP message:\n" + getMessageText(context.getMessage().copy()));
8287
}
8388

89+
@Override
8490
public void handleMessage(MessageHandlerContext context, boolean isRequest) {
8591
log.info((isRequest ? "SOAP request:\n" : "SOAP response:\n") + getMessageText(context.getMessage().copy()));
8692
}
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
package ru.javaops.masterjava.web.handler;
2+
3+
import com.sun.xml.ws.api.handler.MessageHandlerContext;
4+
import lombok.extern.slf4j.Slf4j;
5+
import ru.javaops.masterjava.web.AuthUtil;
6+
7+
import javax.xml.ws.handler.MessageContext;
8+
import java.util.List;
9+
import java.util.Map;
10+
11+
import static ru.javaops.masterjava.web.AuthUtil.encodeBasicAuthHeader;
12+
13+
@Slf4j
14+
abstract public class SoapServerSecurityHandler extends SoapBaseHandler {
15+
16+
private String authHeader;
17+
18+
public SoapServerSecurityHandler(String user, String password) {
19+
this(encodeBasicAuthHeader(user, password));
20+
}
21+
22+
public SoapServerSecurityHandler(String authHeader) {
23+
this.authHeader = authHeader;
24+
}
25+
26+
@Override
27+
public boolean handleMessage(MessageHandlerContext ctx) {
28+
if (!isOutbound(ctx) && authHeader != null) {
29+
Map<String, List<String>> headers = (Map<String, List<String>>) ctx.get(MessageContext.HTTP_REQUEST_HEADERS);
30+
int code = AuthUtil.checkBasicAuth(headers, authHeader);
31+
if (code != 0) {
32+
ctx.put(MessageContext.HTTP_RESPONSE_CODE, code);
33+
throw new SecurityException();
34+
}
35+
}
36+
return true;
37+
}
38+
39+
@Override
40+
public boolean handleFault(MessageHandlerContext context) {
41+
return true;
42+
}
43+
}
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
package ru.javaops.masterjava.web.handler;
2+
3+
import com.sun.xml.ws.api.handler.MessageHandlerContext;
4+
import ru.javaops.masterjava.web.Statistics;
5+
6+
public class SoapStatisticHandler extends SoapBaseHandler {
7+
8+
private static final String PAYLOAD = "PAYLOAD";
9+
private static final String START_TIME = "START_TIME";
10+
11+
@Override
12+
public boolean handleMessage(MessageHandlerContext context) {
13+
if (isOutbound(context)) {
14+
count(context, Statistics.RESULT.SUCCESS);
15+
} else {
16+
String payload = context.getMessage().getPayloadLocalPart();
17+
context.put(PAYLOAD, payload);
18+
context.put(START_TIME, System.currentTimeMillis());
19+
}
20+
return true;
21+
}
22+
23+
@Override
24+
public boolean handleFault(MessageHandlerContext context) {
25+
count(context, Statistics.RESULT.FAIL);
26+
return true;
27+
}
28+
29+
private void count(MessageHandlerContext context, Statistics.RESULT result) {
30+
Statistics.count((String) context.get(PAYLOAD), (Long) context.get(START_TIME), result);
31+
}
32+
}

services/mail-api/src/main/java/ru/javaops/masterjava/service/mail/MailWSClient.java

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
import com.google.common.io.Resources;
77
import lombok.extern.slf4j.Slf4j;
88
import org.slf4j.event.Level;
9-
import ru.javaops.masterjava.web.AuthUtil;
109
import ru.javaops.masterjava.web.WebStateException;
1110
import ru.javaops.masterjava.web.WsClient;
1211
import ru.javaops.masterjava.web.handler.SoapLoggingHandlers;
@@ -23,8 +22,6 @@ public class MailWSClient {
2322
public static final String PASSWORD = "password";
2423
private static final SoapLoggingHandlers.ClientHandler LOGGING_HANDLER = new SoapLoggingHandlers.ClientHandler(Level.DEBUG);
2524

26-
public static String AUTH_HEADER = AuthUtil.encodeBasicAuthHeader(USER, PASSWORD);
27-
2825
static {
2926
WS_CLIENT = new WsClient<>(Resources.getResource("wsdl/mailService.wsdl"),
3027
new QName("http://mail.javaops.ru/", "MailServiceImplService"),
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package ru.javaops.masterjava.service.mail;
2+
3+
import ru.javaops.masterjava.web.handler.SoapServerSecurityHandler;
4+
5+
public class MailHandlers {
6+
public static class SecurityHandler extends SoapServerSecurityHandler {
7+
public SecurityHandler() {
8+
super(MailWSClient.USER, MailWSClient.PASSWORD);
9+
}
10+
}
11+
}

services/mail-service/src/main/java/ru/javaops/masterjava/service/mail/MailServiceImpl.java

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,11 @@
11
package ru.javaops.masterjava.service.mail;
22

3-
import ru.javaops.masterjava.web.AuthUtil;
43
import ru.javaops.masterjava.web.WebStateException;
54

6-
import javax.annotation.Resource;
75
import javax.jws.HandlerChain;
86
import javax.jws.WebService;
9-
import javax.xml.ws.WebServiceContext;
10-
import javax.xml.ws.handler.MessageContext;
117
import javax.xml.ws.soap.MTOM;
128
import java.util.List;
13-
import java.util.Map;
149
import java.util.Set;
1510

1611
@WebService(endpointInterface = "ru.javaops.masterjava.service.mail.MailService", targetNamespace = "http://mail.javaops.ru/"
@@ -21,21 +16,24 @@
2116
@HandlerChain(file = "mailWsHandlers.xml")
2217
public class MailServiceImpl implements MailService {
2318

24-
@Resource
25-
private WebServiceContext wsContext;
19+
// @Resource
20+
// private WebServiceContext wsContext;
2621

22+
@Override
2723
public String sendToGroup(Set<Addressee> to, Set<Addressee> cc, String subject, String body, List<Attachment> attachments) throws WebStateException {
24+
/*
2825
MessageContext mCtx = wsContext.getMessageContext();
2926
Map<String, List<String>> headers = (Map<String, List<String>>) mCtx.get(MessageContext.HTTP_REQUEST_HEADERS);
3027
31-
// HttpServletRequest request = (HttpServletRequest) mCtx.get(MessageContext.SERVLET_REQUEST);
32-
// HttpServletResponse response = (HttpServletResponse) mCtx.get(MessageContext.SERVLET_RESPONSE);
28+
HttpServletRequest request = (HttpServletRequest) mCtx.get(MessageContext.SERVLET_REQUEST);
29+
HttpServletResponse response = (HttpServletResponse) mCtx.get(MessageContext.SERVLET_RESPONSE);
3330
3431
int code = AuthUtil.checkBasicAuth(headers, MailWSClient.AUTH_HEADER);
3532
if (code != 0) {
3633
mCtx.put(MessageContext.HTTP_RESPONSE_CODE, code);
3734
throw new SecurityException();
3835
}
36+
*/
3937
return MailSender.sendToGroup(to, cc, subject, body, attachments);
4038
}
4139

services/mail-service/src/main/resources/mailWsHandlers.xml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,5 +4,13 @@
44
<handler-name>SoapLoggingHandler</handler-name>
55
<handler-class>ru.javaops.masterjava.web.handler.SoapLoggingHandlers$ServerHandler</handler-class>
66
</handler>
7+
<handler>
8+
<handler-name>SoapStatisticHandler</handler-name>
9+
<handler-class>ru.javaops.masterjava.web.handler.SoapStatisticHandler</handler-class>
10+
</handler>
11+
<handler>
12+
<handler-name>SoapStatisticHandler</handler-name>
13+
<handler-class>ru.javaops.masterjava.service.mail.MailHandlers$SecurityHandler</handler-class>
14+
</handler>
715
</handler-chain>
816
</handler-chains>

0 commit comments

Comments
 (0)