Browse Source

重写邮件发送,去除dubbo配置;更新用户验证

hejq 7 years ago
parent
commit
fef9c15414

+ 1 - 1
src/main/java/com/uas/platform/b2b/manage/model/Constant.java

@@ -46,5 +46,5 @@ public class Constant {
     /**
      * 设置cookie名称
      */
-    public static final String COOKIE_NAME = "user";
+    public static final String COOKIE_NAME = "myCookie";
 }

+ 6 - 3
src/main/java/com/uas/platform/b2b/manage/service/impl/UserServiceImpl.java

@@ -1,11 +1,11 @@
 package com.uas.platform.b2b.manage.service.impl;
 
 import com.alibaba.fastjson.JSON;
-import com.uas.message.mail.service.MailService;
 import com.uas.platform.b2b.manage.core.support.SystemSession;
 import com.uas.platform.b2b.manage.dao.UserDao;
 import com.uas.platform.b2b.manage.model.Constant;
 import com.uas.platform.b2b.manage.service.UserService;
+import com.uas.platform.b2b.manage.support.RestMailServiceImpl;
 import com.uas.platform.b2b.manage.support.StringUtil;
 import com.uas.platform.b2b.manage.core.util.StringUtils;
 import com.uas.platform.b2b.manage.dao.SecretKeyRecordDao;
@@ -25,6 +25,7 @@ import javax.servlet.ServletException;
 import javax.servlet.http.Cookie;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
+import javax.servlet.http.HttpSession;
 import java.io.IOException;
 import java.io.UnsupportedEncodingException;
 import java.util.List;
@@ -42,7 +43,7 @@ public class UserServiceImpl implements UserService {
     private UserDao userDao;
 
     @Autowired
-    private MailService mailService;
+    private RestMailServiceImpl mailService;
 
     @Autowired
     private SecretKeyRecordDao recordDao;
@@ -107,8 +108,10 @@ public class UserServiceImpl implements UserService {
         }
         User user = users.get(0);
         if (Md5Utils.encode(passWord, user.getName()).equals(user.getPassword())) {
+            HttpSession session = request.getSession();
             String result = EncryptUtils.aesEncode(JSON.toJSONString(user));
-            Cookie cookie = new Cookie(Constant.COOKIE_NAME, result);
+            session.setAttribute("user", result);
+            Cookie cookie = new Cookie(Constant.COOKIE_NAME, session.getId());
             response.addCookie(cookie);
             SystemSession.setUser(user);
         } else {

+ 153 - 0
src/main/java/com/uas/platform/b2b/manage/support/RestMailServiceImpl.java

@@ -0,0 +1,153 @@
+package com.uas.platform.b2b.manage.support;
+
+import com.alibaba.fastjson.JSONObject;
+import com.uas.message.common.domain.MapMessage;
+import com.uas.message.common.domain.Page;
+import com.uas.message.mail.domain.MailLog;
+import com.uas.message.mail.service.MailService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.http.HttpEntity;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.MediaType;
+import org.springframework.http.ResponseEntity;
+import org.springframework.stereotype.Service;
+import org.springframework.web.client.RestTemplate;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * 基于RestTemplate实现邮件发送
+ *
+ * @author hejq
+ * @date 2018-07-04
+ */
+@Service
+public class RestMailServiceImpl implements MailService {
+
+    private RestTemplate restTemplate;
+
+    /**
+     * 邮件服务主机地址
+     */
+    private static String MAIL_CONSOLE_HOST = "http://message.ubtob.com/";
+
+    /**
+     * 发送邮件给单个人url
+     */
+    private String MAIL_SEND_URL = "mail/send";
+
+    /**
+     * 发送邮件给多个人 url
+     */
+    private String MAIL_SEND_MANY_URL = "mail/send/o2m";
+
+    @Autowired
+    public RestMailServiceImpl(RestTemplate restTemplate) {
+        this.restTemplate = restTemplate;
+    }
+
+    @Override
+    public List<Map<String, Object>> sendByDefault(String[] strings, String s, String s1) {
+        // 暂未使用
+        return null;
+    }
+
+    @Override
+    public MailLog send(MapMessage mapMessage) {
+        // 暂未使用
+        return null;
+    }
+
+    @Override
+    public List<MailLog> sendAll(MapMessage mapMessage) {
+        // 暂未使用
+        return null;
+    }
+
+    /**
+     * 发送邮件给个人
+     * @param templateId
+     * @param receiver
+     * @param params
+     * @return
+     */
+    @Override
+    public MailLog send(String templateId, String receiver, Map<String, Object> params) {
+        HttpHeaders headers = new HttpHeaders();
+        MediaType type = MediaType.parseMediaType("application/json; charset=UTF-8");
+        headers.setContentType(type);
+        headers.add("Accept", MediaType.APPLICATION_JSON.toString());
+
+        JSONObject object = new JSONObject();
+        object.put("templateId", templateId);
+        object.put("receiver", receiver);
+        object.put("params", params);
+
+        HttpEntity<String> formEntity = new HttpEntity<String>(object.toJSONString(), headers);
+        ResponseEntity<MailLog> responseEntity = restTemplate.postForEntity(MAIL_CONSOLE_HOST + MAIL_SEND_URL, formEntity, MailLog.class);
+        return responseEntity.getBody();
+    }
+
+    /**
+     * 发送邮件给多个人
+     * @param templateId
+     * @param receivers
+     * @param params
+     * @return
+     */
+    @Override
+    public List<MailLog> sendAll(String templateId, Set<String> receivers, Map<String, Object> params) {
+        HttpHeaders headers = new HttpHeaders();
+        MediaType type = MediaType.parseMediaType("application/json; charset=UTF-8");
+        headers.setContentType(type);
+        headers.add("Accept", MediaType.APPLICATION_JSON.toString());
+
+        JSONObject object = new JSONObject();
+        object.put("templateId", templateId);
+        object.put("receivers", receivers);
+        object.put("params", params);
+
+        HttpEntity<String> formEntity = new HttpEntity<String>(object.toJSONString(), headers);
+        ResponseEntity<String> responseEntity = restTemplate.postForEntity(MAIL_CONSOLE_HOST + MAIL_SEND_MANY_URL, formEntity, String.class);
+        List<MailLog> mailLogs = JSONObject.parseArray(responseEntity.getBody(), MailLog.class);
+        return mailLogs;
+    }
+
+    @Override
+    public List<MailLog> sendAll(List<MapMessage> list) {
+        // 暂未使用
+        return null;
+    }
+
+    @Override
+    public Page<MailLog> findLogs(int i, int i1) {
+        // 暂未使用
+        return null;
+    }
+
+    @Override
+    public Page<MailLog> findLogs(String s, int i, int i1) {
+        // 暂未使用
+        return null;
+    }
+
+    @Override
+    public Page<MailLog> findLogs(boolean b, int i, int i1) {
+        // 暂未使用
+        return null;
+    }
+
+    @Override
+    public Page<MailLog> findLogs(String s, String s1, Boolean aBoolean, int i, int i1) {
+        // 暂未使用
+        return null;
+    }
+
+    @Override
+    public void deleteLogs(String s) {
+        // 暂未使用
+    }
+}

+ 38 - 50
src/main/java/com/uas/platform/b2b/manage/web/filter/SSOInterceptor.java

@@ -15,6 +15,7 @@ import javax.servlet.*;
 import javax.servlet.http.Cookie;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
+import javax.servlet.http.HttpSession;
 import java.io.IOException;
 import java.io.UnsupportedEncodingException;
 import java.util.ArrayList;
@@ -42,36 +43,33 @@ public class SSOInterceptor extends HandlerInterceptorAdapter implements Filter
     }
 
     private final boolean authenticate(HttpServletRequest request, HttpServletResponse response) throws IOException {
-        User user = SystemSession.getUser();
-        if (null == user) {
-            Cookie[] cookies = request.getCookies();
-            List<Cookie> cookieList = new ArrayList<>();
-            if (null != cookies) {
-                cookieList = Arrays.asList(cookies);
-            }
-            final boolean[] cookieExist = {false};
-            boolean cookieFlag = checkCookie(cookieExist, cookieList, request);
-            if (!cookieFlag) {
-                if (!this.onAuthenticateFailed(request, response)) {
-                    return false;
-                } else {
-                    return true;
-                }
+        Cookie[] cookies = request.getCookies();
+        List<Cookie> cookieList = new ArrayList<>();
+        if (null != cookies) {
+            cookieList = Arrays.asList(cookies);
+        }
+        final boolean[] cookieExist = {false};
+        boolean cookieFlag = checkCookie(cookieExist, cookieList, request);
+        if (!cookieFlag) {
+            if (!this.onAuthenticateFailed(request, response)) {
+                return false;
+            } else {
+                return true;
             }
-            // 通过HttpServletRequest获取登录信息
-            logSession(request);
-            user = SystemSession.getUser();
-            // 未登录则要求登录
-            if (user == null) {
-                logoutSession(request);
-                if (!this.onAuthenticateFailed(request, response)) {
-                    return false;
-                } else {
-                    return true;
-                }
+        }
+        // 通过HttpServletRequest获取登录信息
+        logSession(request);
+        User user = SystemSession.getUser();
+        // 未登录则要求登录
+        if (user == null) {
+            logoutSession(request);
+            if (!this.onAuthenticateFailed(request, response)) {
+                return false;
             } else {
-                checkLogin(response);
+                return true;
             }
+        } else {
+            checkLogin(response);
         }
         return true;
     }
@@ -87,7 +85,9 @@ public class SSOInterceptor extends HandlerInterceptorAdapter implements Filter
         cookieList.forEach(cookie -> {
             switch (cookie.getName()) {
                 case (Constant.COOKIE_NAME):
-                    cookieExist[0] = true;
+                    if (request.getSession().getId().equals(cookie.getValue())) {
+                        cookieExist[0] = true;
+                    }
                     break;
                 default:
             }
@@ -114,21 +114,15 @@ public class SSOInterceptor extends HandlerInterceptorAdapter implements Filter
      * @param request HttpServletRequest
      */
     private void logSession(HttpServletRequest request) throws UnsupportedEncodingException {
-        Cookie[] cookies = request.getCookies();
-        if (null != cookies) {
-            Arrays.asList(cookies).forEach(cookie -> {
-                switch (cookie.getName()) {
-                    case (Constant.COOKIE_NAME):
-                        String result = EncryptUtils.aesDecode(cookie.getValue());
-                        User user = JSONObject.parseObject(result, User.class);
-                        if (user != null) {
-                            SystemSession.setUser(user);
-                            log.info("登录成功," + user.toString());
-                        }
-                        break;
-                    default:
-                }
-            });
+        HttpSession session = request.getSession();
+        Object object = session.getAttribute("user");
+        if (null != object) {
+            String result = EncryptUtils.aesDecode(object.toString());
+            User user = JSONObject.parseObject(result, User.class);
+            if (user != null) {
+                SystemSession.setUser(user);
+                log.info("登录成功," + user.toString());
+            }
         }
     }
 
@@ -165,13 +159,7 @@ public class SSOInterceptor extends HandlerInterceptorAdapter implements Filter
      */
     private void removeLocalSession(HttpServletRequest request) {
         SystemSession.clear();
-        Cookie[] cookies = request.getCookies();
-        if (null != cookies) {
-            Arrays.asList(cookies).forEach(cookie -> {
-                cookie.setMaxAge(0);
-                cookie.setPath("/");
-            });
-        }
+        request.getSession().removeAttribute("user");
         User user = SystemSession.getUser();
         if (null != user) {
             removeLocalSession(request);

+ 0 - 14
src/main/resources/spring/dubbo-consumer.xml

@@ -1,14 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<beans xmlns="http://www.springframework.org/schema/beans"
-	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
-	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
-	http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
-
-	<dubbo:application name="b2bManage_consumer" />
-
-	<dubbo:registry address="zookeeper://10.10.100.11:2181" check="false" />
-
-	<!-- 邮件服务 -->
-	<dubbo:reference id="mailService"
-		interface="com.uas.message.mail.service.MailService" timeout="10000" />
-</beans>

+ 4 - 0
src/main/webapp/WEB-INF/web.xml

@@ -59,6 +59,10 @@
 		<listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
 	</listener>
 	
+	<listener>
+		<listener-class>javax.servlet.http.HttpSessionAttributeListener</listener-class>
+	</listener>
+	
 	<!-- 404 page -->
 	<error-page>  
         <error-code>404</error-code>