diff --git a/common/src/main/java/ru/javaops/masterjava/config/Configs.java b/common/src/main/java/ru/javaops/masterjava/config/Configs.java
index 1c9b1cc..0c928e7 100644
--- a/common/src/main/java/ru/javaops/masterjava/config/Configs.java
+++ b/common/src/main/java/ru/javaops/masterjava/config/Configs.java
@@ -11,8 +11,12 @@ public static Config getConfig(String resource) {
return ConfigFactory.parseResources(resource).resolve();
}
- public static Config getConfig(String resource, String domain) {
- return getConfig(resource).getConfig(domain);
+ public static Config getConfig(String resource, String... domains ) {
+ Config config = getConfig(resource);
+ for (String domain: domains) {
+ config = config.getConfig(domain);
+ }
+ return config;
}
public static File getConfigFile(String path) {
diff --git a/parent/pom.xml b/parent/pom.xml
index 46400fa..4e8a004 100644
--- a/parent/pom.xml
+++ b/parent/pom.xml
@@ -19,7 +19,7 @@
1.7.25
- /apps/masterjava/config/
+ c:/apps/masterjava/config/
false
diff --git a/services/common-ws/src/main/java/ru/javaops/web/HostConfig.java b/services/common-ws/src/main/java/ru/javaops/web/HostConfig.java
new file mode 100644
index 0000000..d44b52f
--- /dev/null
+++ b/services/common-ws/src/main/java/ru/javaops/web/HostConfig.java
@@ -0,0 +1,28 @@
+package ru.javaops.web;
+
+import com.typesafe.config.Config;
+import lombok.Getter;
+import org.slf4j.event.Level;
+import ru.javaops.masterjava.config.Configs;
+
+/**
+ * Created by val on 2017-05-05.
+ */
+@Getter
+public class HostConfig {
+ public static final HostConfig HOST =
+ new HostConfig(Configs.getConfig("hosts.conf", "hosts", "mail"));
+
+ private final String endpoint;
+ private final Level debugLevel;
+ private final String user;
+ private final String password;
+
+ private HostConfig(Config hosts) {
+ this.endpoint = hosts.getString("endpoint");
+ this.debugLevel = Level.valueOf(hosts.getString("debug.client"));
+ this.user = hosts.getString("user");
+ this.password = hosts.getString("password");
+ }
+
+}
diff --git a/services/common-ws/src/main/java/ru/javaops/web/WsClient.java b/services/common-ws/src/main/java/ru/javaops/web/WsClient.java
index f2db3a9..30677d1 100644
--- a/services/common-ws/src/main/java/ru/javaops/web/WsClient.java
+++ b/services/common-ws/src/main/java/ru/javaops/web/WsClient.java
@@ -1,8 +1,7 @@
package ru.javaops.web;
-import com.typesafe.config.Config;
import ru.javaops.masterjava.ExceptionType;
-import ru.javaops.masterjava.config.Configs;
+import ru.javaops.web.handler.SoapClientLoggingHandler;
import javax.xml.namespace.QName;
import javax.xml.ws.Binding;
@@ -14,24 +13,20 @@
import java.util.List;
import java.util.Map;
-public class WsClient {
- private static Config HOSTS;
+import static ru.javaops.web.HostConfig.HOST;
+public class WsClient {
private final Class serviceClass;
private final Service service;
private String endpointAddress;
- static {
- HOSTS = Configs.getConfig("hosts.conf", "hosts");
- }
-
public WsClient(URL wsdlUrl, QName qname, Class serviceClass) {
this.serviceClass = serviceClass;
this.service = Service.create(wsdlUrl, qname);
}
- public void init(String host, String endpointAddress) {
- this.endpointAddress = HOSTS.getString(host) + endpointAddress;
+ public void init(String endpointAddress) {
+ this.endpointAddress = HOST.getEndpoint() + endpointAddress;
}
// Post is not thread-safe (http://stackoverflow.com/a/10601916/548473)
@@ -43,16 +38,16 @@ public T getPort(WebServiceFeature... features) {
return port;
}
- public static void setAuth(T port, String user, String password) {
+ public static void setAuth(T port) {
Map requestContext = ((BindingProvider) port).getRequestContext();
- requestContext.put(BindingProvider.USERNAME_PROPERTY, user);
- requestContext.put(BindingProvider.PASSWORD_PROPERTY, password);
+ requestContext.put(BindingProvider.USERNAME_PROPERTY, HOST.getUser());
+ requestContext.put(BindingProvider.PASSWORD_PROPERTY, HOST.getPassword());
}
- public static void setHandler(T port, Handler handler) {
+ public static void setHandler(T port) {
Binding binding = ((BindingProvider) port).getBinding();
List handlerList = binding.getHandlerChain();
- handlerList.add(handler);
+ handlerList.add(new SoapClientLoggingHandler(HOST.getDebugLevel()));
binding.setHandlerChain(handlerList);
}
diff --git a/services/common-ws/src/main/java/ru/javaops/web/handler/SoapLoggingHandler.java b/services/common-ws/src/main/java/ru/javaops/web/handler/SoapLoggingHandler.java
index b01f8da..66cd103 100644
--- a/services/common-ws/src/main/java/ru/javaops/web/handler/SoapLoggingHandler.java
+++ b/services/common-ws/src/main/java/ru/javaops/web/handler/SoapLoggingHandler.java
@@ -79,6 +79,7 @@ public void handleMessage(MessageHandlerContext context, boolean isRequest) {
DEBUG {
public void handleFault(MessageHandlerContext context) {
log.error("Fault SOAP message:\n" + getMessageText(context.getMessage().copy()));
+
}
public void handleMessage(MessageHandlerContext context, boolean isRequest) {
diff --git a/services/mail-api/src/main/java/ru/javaops/masterjava/service/mail/MailWSClient.java b/services/mail-api/src/main/java/ru/javaops/masterjava/service/mail/MailWSClient.java
index 63d8dc3..d0af717 100644
--- a/services/mail-api/src/main/java/ru/javaops/masterjava/service/mail/MailWSClient.java
+++ b/services/mail-api/src/main/java/ru/javaops/masterjava/service/mail/MailWSClient.java
@@ -5,11 +5,8 @@
import com.google.common.collect.Iterables;
import com.google.common.io.Resources;
import lombok.extern.slf4j.Slf4j;
-import org.slf4j.event.Level;
-import ru.javaops.web.AuthUtil;
import ru.javaops.web.WebStateException;
import ru.javaops.web.WsClient;
-import ru.javaops.web.handler.SoapClientLoggingHandler;
import javax.xml.namespace.QName;
import javax.xml.ws.soap.MTOMFeature;
@@ -19,21 +16,15 @@
@Slf4j
public class MailWSClient {
private static final WsClient WS_CLIENT;
- public static final String USER = "user";
- public static final String PASSWORD = "password";
- private static final SoapClientLoggingHandler LOGGING_HANDLER = new SoapClientLoggingHandler(Level.DEBUG);
-
- public static String AUTH_HEADER = AuthUtil.encodeBasicAuthHeader(USER, PASSWORD);
static {
WS_CLIENT = new WsClient(Resources.getResource("wsdl/mailService.wsdl"),
new QName("http://mail.javaops.ru/", "MailServiceImplService"),
MailService.class);
- WS_CLIENT.init("mail", "/mail/mailService?wsdl");
+ WS_CLIENT.init("/mail/mailService?wsdl");
}
-
public static String sendToGroup(final Set to, final Set cc, final String subject, final String body, List attaches) throws WebStateException {
log.info("Send mail to '" + to + "' cc '" + cc + "' subject '" + subject + (log.isDebugEnabled() ? "\nbody=" + body : ""));
String status;
@@ -62,8 +53,8 @@ public static GroupResult sendBulk(final Set to, final String subject
private static MailService getPort() {
MailService port = WS_CLIENT.getPort(new MTOMFeature(1024));
- WsClient.setAuth(port, USER, PASSWORD);
- WsClient.setHandler(port, LOGGING_HANDLER);
+ WsClient.setAuth(port);
+ WsClient.setHandler(port);
return port;
}
diff --git a/services/mail-service/src/main/java/ru/javaops/masterjava/service/mail/MailServiceImpl.java b/services/mail-service/src/main/java/ru/javaops/masterjava/service/mail/MailServiceImpl.java
index 252b4f3..f69449e 100644
--- a/services/mail-service/src/main/java/ru/javaops/masterjava/service/mail/MailServiceImpl.java
+++ b/services/mail-service/src/main/java/ru/javaops/masterjava/service/mail/MailServiceImpl.java
@@ -1,15 +1,12 @@
package ru.javaops.masterjava.service.mail;
-import ru.javaops.web.AuthUtil;
import ru.javaops.web.WebStateException;
import javax.annotation.Resource;
import javax.jws.HandlerChain;
import javax.jws.WebService;
import javax.xml.ws.WebServiceContext;
-import javax.xml.ws.handler.MessageContext;
import java.util.List;
-import java.util.Map;
import java.util.Set;
@WebService(endpointInterface = "ru.javaops.masterjava.service.mail.MailService", targetNamespace = "http://mail.javaops.ru/"
@@ -25,17 +22,6 @@ public class MailServiceImpl implements MailService {
@Override
public String sendToGroup(Set to, Set cc, String subject, String body, List attaches) throws WebStateException {
- MessageContext mCtx = wsContext.getMessageContext();
- Map> headers = (Map>) mCtx.get(MessageContext.HTTP_REQUEST_HEADERS);
-
-// HttpServletRequest request = (HttpServletRequest) mCtx.get(MessageContext.SERVLET_REQUEST);
-// HttpServletResponse response = (HttpServletResponse) mCtx.get(MessageContext.SERVLET_RESPONSE);
-
- int code = AuthUtil.checkBasicAuth(headers, MailWSClient.AUTH_HEADER);
- if (code != 0) {
- mCtx.put(MessageContext.HTTP_RESPONSE_CODE, code);
- throw new SecurityException();
- }
return MailSender.sendToGroup(to, cc, subject, body, attaches);
}
diff --git a/services/mail-service/src/main/java/ru/javaops/masterjava/service/mail/handler/SoapServerSecurityHandler.java b/services/mail-service/src/main/java/ru/javaops/masterjava/service/mail/handler/SoapServerSecurityHandler.java
new file mode 100644
index 0000000..02fd423
--- /dev/null
+++ b/services/mail-service/src/main/java/ru/javaops/masterjava/service/mail/handler/SoapServerSecurityHandler.java
@@ -0,0 +1,52 @@
+package ru.javaops.masterjava.service.mail.handler;
+
+import com.sun.xml.ws.api.handler.MessageHandler;
+import com.sun.xml.ws.api.handler.MessageHandlerContext;
+import com.typesafe.config.Config;
+import ru.javaops.masterjava.config.Configs;
+import ru.javaops.web.AuthUtil;
+import ru.javaops.web.Statistics;
+
+import javax.xml.namespace.QName;
+import javax.xml.ws.handler.MessageContext;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * Created by val on 2017-05-03.
+ */
+public class SoapServerSecurityHandler implements MessageHandler {
+ private final static Config MAIL = Configs.getConfig("hosts.conf", "hosts", "mail");
+ private final static String AUTH_HEADER;
+ static {
+ AUTH_HEADER = AuthUtil.encodeBasicAuthHeader(MAIL.getString("user"), MAIL.getString("password"));
+ }
+
+ @Override
+ public boolean handleMessage(MessageHandlerContext context) {
+ if (!(Boolean)context.get(MessageContext.MESSAGE_OUTBOUND_PROPERTY)){
+ Map> headers = (Map>) context.get(MessageContext.HTTP_REQUEST_HEADERS);
+ int code = AuthUtil.checkBasicAuth(headers, AUTH_HEADER);
+ if (code != 0) {
+ context.put(MessageContext.HTTP_RESPONSE_CODE, code);
+ Statistics.count(context.getMessage().getPayloadLocalPart(), System.currentTimeMillis(), Statistics.RESULT.FAIL);
+ throw new SecurityException();
+ }
+ }
+ return true;
+ }
+
+ @Override
+ public boolean handleFault(MessageHandlerContext context) {
+ return true;
+ }
+
+ @Override
+ public void close(MessageContext context) {}
+
+ @Override
+ public Set getHeaders() {
+ return null;
+ }
+}
diff --git a/services/mail-service/src/main/resources/mailWsHandlers.xml b/services/mail-service/src/main/resources/mailWsHandlers.xml
index 6415e80..786d0ea 100644
--- a/services/mail-service/src/main/resources/mailWsHandlers.xml
+++ b/services/mail-service/src/main/resources/mailWsHandlers.xml
@@ -1,8 +1,15 @@
+
SoapLoggingHandler
ru.javaops.web.handler.SoapServerLoggingHandler
+
+
+ SoapServerSecurityHandler
+ ru.javaops.masterjava.service.mail.handler.SoapServerSecurityHandler
+
+
\ No newline at end of file