Переглянути джерело

checkout active localhost

guo00guo 5 роки тому
батько
коміт
433728a723
34 змінених файлів з 452 додано та 84 видалено
  1. 6 2
      mooctest-user-server/src/main/java/cn/iselab/mooctest/user/configure/RedisSessionConfiguration.java
  2. 18 1
      mooctest-user-server/src/main/java/cn/iselab/mooctest/user/constants/UrlConstants.java
  3. 2 2
      mooctest-user-server/src/main/java/cn/iselab/mooctest/user/constants/VerifyConstants.java
  4. 17 0
      mooctest-user-server/src/main/java/cn/iselab/mooctest/user/mapper/OperationRecordDao.java
  5. 36 0
      mooctest-user-server/src/main/java/cn/iselab/mooctest/user/model/OperationRecord.java
  6. 3 0
      mooctest-user-server/src/main/java/cn/iselab/mooctest/user/service/UserService.java
  7. 2 2
      mooctest-user-server/src/main/java/cn/iselab/mooctest/user/service/impl/MailServiceImpl.java
  8. 10 0
      mooctest-user-server/src/main/java/cn/iselab/mooctest/user/service/impl/UserServiceImpl.java
  9. 2 1
      mooctest-user-server/src/main/java/cn/iselab/mooctest/user/util/EncryptionUtil.java
  10. 1 1
      mooctest-user-server/src/main/java/cn/iselab/mooctest/user/util/MSUtil.java
  11. 25 15
      mooctest-user-server/src/main/java/cn/iselab/mooctest/user/web/ctrl/PageController.java
  12. 6 0
      mooctest-user-server/src/main/java/cn/iselab/mooctest/user/web/ctrl/TestController.java
  13. 72 20
      mooctest-user-server/src/main/java/cn/iselab/mooctest/user/web/ctrl/UserController.java
  14. 37 0
      mooctest-user-server/src/main/java/cn/iselab/mooctest/user/web/data/OperationRecordVO.java
  15. 16 0
      mooctest-user-server/src/main/java/cn/iselab/mooctest/user/web/logic/UserLogic.java
  16. 1 1
      mooctest-user-server/src/main/java/cn/iselab/mooctest/user/web/logic/impl/ThirdPartyLogicImpl.java
  17. 176 17
      mooctest-user-server/src/main/java/cn/iselab/mooctest/user/web/logic/impl/UserLogicImpl.java
  18. 1 1
      mooctest-user-server/src/main/resources/bootstrap.yaml
  19. 2 2
      mooctest-user-server/src/main/resources/templates/common/common_head.html
  20. 1 1
      mooctest-user-server/src/main/resources/templates/email/arrears_mail.html
  21. 1 1
      mooctest-user-server/src/main/resources/templates/email/verify_mail.html
  22. 1 1
      mooctest-user-server/src/main/resources/templates/forget_password.html
  23. 1 1
      mooctest-user-server/src/main/resources/templates/forget_password_email.html
  24. 1 1
      mooctest-user-server/src/main/resources/templates/forget_password_mobile.html
  25. 1 1
      mooctest-user-server/src/main/resources/templates/forget_password_reset.html
  26. 1 1
      mooctest-user-server/src/main/resources/templates/index.html
  27. 2 2
      mooctest-user-server/src/main/resources/templates/login.html
  28. 2 2
      mooctest-user-server/src/main/resources/templates/mobile_login.html
  29. 1 1
      mooctest-user-server/src/main/resources/templates/register.html
  30. 2 2
      mooctest-user-server/src/main/resources/templates/reset_email.html
  31. 1 1
      mooctest-user-server/src/main/resources/templates/reset_mobile.html
  32. 1 1
      mooctest-user-server/src/main/resources/templates/reset_password.html
  33. 2 2
      mooctest-user-server/src/main/resources/templates/third_party_bind.html
  34. 1 1
      mooctest-user-server/src/main/resources/templates/upload_card_info.html

+ 6 - 2
mooctest-user-server/src/main/java/cn/iselab/mooctest/user/configure/RedisSessionConfiguration.java

@@ -1,5 +1,6 @@
 package cn.iselab.mooctest.user.configure;
 
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.data.redis.connection.RedisConnectionFactory;
@@ -18,16 +19,19 @@ import org.springframework.session.web.http.DefaultCookieSerializer;
 @Configuration
 @EnableRedisHttpSession
 public class RedisSessionConfiguration {
+
+    @Value("${website.domainName}")
+    private String domainName;
+
     @Bean
     public CookieSerializer cookieSerializer() {
         DefaultCookieSerializer serializer = new DefaultCookieSerializer();
 //        serializer.setCookieName("SESSION");
         serializer.setCookiePath("/");
-        serializer.setDomainName(".mooctest.net");
+        serializer.setDomainName(domainName);
 //        serializer.setDomainNamePattern("^.+?\\.(\\w+\\.[a-z]+)$");
         return serializer;
     }
-
     @Bean
     RedisSerializer<Object> springSessionDefaultRedisSerializer() {
         return new CustomSessionDefaultRedisSerializer();

+ 18 - 1
mooctest-user-server/src/main/java/cn/iselab/mooctest/user/constants/UrlConstants.java

@@ -1,11 +1,15 @@
 package cn.iselab.mooctest.user.constants;
 
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Component;
+
 /**
  * @Author ROKG
  * @Description
  * @Date: Created in 下午2:45 2018/2/14
  * @Modified By:
  */
+@Component
 public class UrlConstants {
 
     public static final String API_INTEGRAL="/api/integral";
@@ -16,10 +20,23 @@ public class UrlConstants {
 
     public static final String API="/api/";
 
-    public static final String DFAULT_GOTO="http://www.mooctest.net/user/info";
+
+    public static String DEFAULT_GOTO="http://www.cofortest.com";
 
     public static final String GET_GITHUB_LOGIN_ACCESSTOKEN = "https://github.com/login/oauth/access_token?code=CODE&client_id=CLIENTID&client_secret=CLIENTSECRET";
 
     public static final String GET_GITHUB_USER_INFO = "https://api.github.com/user?access_token=ACCESSTOKEN";
 
+    public static String GO_LOGIN = "http://user.cofortest.com/page/login";
+
+    @Value("${default.goto}")
+    public void setDefaultGoto(String defaultGoto){
+        DEFAULT_GOTO = defaultGoto;
+    }
+
+    @Value("${default.login}")
+    public void setGoLogin(String goLogin){
+        GO_LOGIN = goLogin;
+    }
+
 }

+ 2 - 2
mooctest-user-server/src/main/java/cn/iselab/mooctest/user/constants/VerifyConstants.java

@@ -5,10 +5,10 @@ package cn.iselab.mooctest.user.constants;
  * @Date: 2018.12.28 13:10
  */
 public class VerifyConstants {
-    public static final String SENDER_NAME = "慕测科技";
+    public static final String SENDER_NAME = "众测服务平台";
     public static final long TIME_OUT = 1000 * 60 * 5;
     public static final String SMS_VERI_TEMPLATE_ID = "73686";
     // public static final String SMS_VERI_TIMEOUT = "30";
-    public static final long MOBILE_VERIFICATION_INTERVAL = 90 * 1000;
+    public static final long MOBILE_VERIFICATION_INTERVAL = 60 * 1000;
 
 }

+ 17 - 0
mooctest-user-server/src/main/java/cn/iselab/mooctest/user/mapper/OperationRecordDao.java

@@ -0,0 +1,17 @@
+package cn.iselab.mooctest.user.mapper;
+
+import cn.iselab.mooctest.user.model.OperationRecord;
+import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
+import org.springframework.data.repository.CrudRepository;
+
+import javax.transaction.Transactional;
+
+/**
+ * @author: Diors.Po
+ * @Email: 171256175@qq.com
+ * @date 2019-09-15 20:57
+ */
+@Transactional
+public interface OperationRecordDao extends CrudRepository<OperationRecord, Long>, JpaSpecificationExecutor<OperationRecord> {
+
+}

+ 36 - 0
mooctest-user-server/src/main/java/cn/iselab/mooctest/user/model/OperationRecord.java

@@ -0,0 +1,36 @@
+package cn.iselab.mooctest.user.model;
+
+import lombok.Data;
+
+import javax.persistence.*;
+import java.sql.Timestamp;
+
+/**
+ * @author: Diors.Po
+ * @Email: 171256175@qq.com
+ * @date 2019-09-15 20:52
+ */
+@Data
+@Entity
+@Table(name = "operation_record")
+public class OperationRecord {
+
+    @Id
+    @GeneratedValue
+    private Long id;
+
+    @Column(name = "ip")
+    private String ip;
+
+    @Column(name = "user_Id")
+    private Long userId;
+
+    @Column(name = "operation")
+    private String operation;
+
+    @Column(name = "resource")
+    private String resource;
+
+    @Column(name = "create_time")
+    private Timestamp createTime;
+}

+ 3 - 0
mooctest-user-server/src/main/java/cn/iselab/mooctest/user/service/UserService.java

@@ -1,6 +1,7 @@
 package cn.iselab.mooctest.user.service;
 
 
+import cn.iselab.mooctest.user.model.OperationRecord;
 import cn.iselab.mooctest.user.model.User;
 
 import java.util.List;
@@ -21,6 +22,8 @@ public interface UserService {
 
     User update(User user);
 
+    OperationRecord recordOperation(OperationRecord record);
+
     List<User> findByFuzzyName(String name);
 
     List<User> findByFuzzyEmail(String email);

+ 2 - 2
mooctest-user-server/src/main/java/cn/iselab/mooctest/user/service/impl/MailServiceImpl.java

@@ -85,7 +85,7 @@ public class MailServiceImpl implements MailService {
         Context context = new Context();
         context.setVariable("verifyCode", code);
         String emailContent = templateEngine.process("email/verify_mail", context);
-        sendHtmlEmail(sender,receiver, "【验证码-慕测科技】", emailContent);
+        sendHtmlEmail(sender,receiver, "【验证码-众测服务平台】", emailContent);
     }
 
     @Override
@@ -101,7 +101,7 @@ public class MailServiceImpl implements MailService {
             MimeMessageHelper helper = new MimeMessageHelper(message,true);
             helper.setFrom(mailProperties.getUsername(), VerifyConstants.SENDER_NAME);
             helper.setTo(receivers);
-            helper.setSubject("【MOOCTEST】短信服务欠费通知");
+            helper.setSubject("【众测服务平台】短信服务欠费通知");
             helper.setText(emailContent, true);
         } catch (UnsupportedEncodingException e) {
             logger.error("设置发件人名称时编码出错", e);

+ 10 - 0
mooctest-user-server/src/main/java/cn/iselab/mooctest/user/service/impl/UserServiceImpl.java

@@ -1,6 +1,8 @@
 package cn.iselab.mooctest.user.service.impl;
 
+import cn.iselab.mooctest.user.mapper.OperationRecordDao;
 import cn.iselab.mooctest.user.mapper.UserMapper;
+import cn.iselab.mooctest.user.model.OperationRecord;
 import cn.iselab.mooctest.user.model.User;
 import cn.iselab.mooctest.user.service.UserService;
 import lombok.extern.java.Log;
@@ -22,6 +24,9 @@ public class UserServiceImpl implements UserService {
     @Autowired
     private UserMapper userMapper;
 
+    @Autowired
+    private OperationRecordDao operationRecordDao;
+
     @Override
     public User findByEmail(String email) {
         return userMapper.findByEmail(email);
@@ -60,6 +65,11 @@ public class UserServiceImpl implements UserService {
     }
 
     @Override
+    public OperationRecord recordOperation(OperationRecord record) {
+        return operationRecordDao.save(record);
+    }
+
+    @Override
     public List<User> findByFuzzyName(String name) {
         return userMapper.findByFuzzyName(name);
     }

+ 2 - 1
mooctest-user-server/src/main/java/cn/iselab/mooctest/user/util/EncryptionUtil.java

@@ -141,6 +141,7 @@ public class EncryptionUtil {
         // 用密钥初始化Cipher对象
         cipher.init(Cipher.DECRYPT_MODE, securekey, sr);
 
-        return cipher.doFinal(data);
+        byte[] bytes = cipher.doFinal(data);
+        return bytes;
     }
 }

+ 1 - 1
mooctest-user-server/src/main/java/cn/iselab/mooctest/user/util/MSUtil.java

@@ -49,7 +49,7 @@ public class MSUtil {
 
         // send short message by invoking SDK
         // HashMap<String, Object> result = sendSMSSDK(receiver, VerifyConstants.SMS_VERI_TEMPLATE_ID, veriCode, "5分钟");
-        HashMap<String, Object> result = sendSMSSDK(receiver, "1", veriCode, "5");
+        HashMap<String, Object> result = sendSMSSDK(receiver, "73686", veriCode, "5");
         // Check return result to see if process success
         if ("000000".equals(result.get("statusCode"))) {
             // success

+ 25 - 15
mooctest-user-server/src/main/java/cn/iselab/mooctest/user/web/ctrl/PageController.java

@@ -9,6 +9,7 @@ import cn.iselab.mooctest.user.data.ResponseResult;
 import cn.iselab.mooctest.user.data.UserInfo;
 import cn.iselab.mooctest.user.model.UserThirdParty;
 import cn.iselab.mooctest.user.service.ThirdPartyAuthService;
+import cn.iselab.mooctest.user.service.UserService;
 import cn.iselab.mooctest.user.util.EncryptionUtil;
 import cn.iselab.mooctest.user.web.data.UserVO;
 import cn.iselab.mooctest.user.web.logic.ThirdPartyLogic;
@@ -43,6 +44,7 @@ public class PageController extends BaseController{
     @Autowired
     WechatLogic wechatLogic;
 
+
     @RequestMapping(value = UrlConstants.PAGE + "login", method = RequestMethod.GET)
     public String login(@RequestParam(value = "redirect", required = false)String redirect, HttpServletRequest request){
         LOG.info("redirect:" + redirect);
@@ -55,7 +57,7 @@ public class PageController extends BaseController{
         }
         if (redirectUrl==null || redirectUrl.isEmpty() || !redirectUrl.startsWith("http")){
             if (request.getSession().getAttribute("redirectURL")==null)
-                redirectUrl = UrlConstants.DFAULT_GOTO;
+                redirectUrl = UrlConstants.DEFAULT_GOTO;
             else
                 redirectUrl = (String) request.getSession().getAttribute(("redirectURL"));
         }
@@ -63,7 +65,7 @@ public class PageController extends BaseController{
         session.setAttribute("redirectURL", redirectUrl);
         LOG.info("RedirectUrl" + redirectUrl);
         if (session.getAttribute("userId") != null){
-            LOG.info("用户已登录!用户ID"+session.getAttribute("userId").toString());
+            LOG.info("用户已登录!用户ID"+session.getAttribute("userId"));
             return "redirect:"+redirectUrl;
         }
         return "login";
@@ -77,12 +79,13 @@ public class PageController extends BaseController{
         result = userLogic.checkPWD(user);
         if (result.getStatus() == ResponseStatus.SUCCESS) {
             HttpSession session = request.getSession();
-            session.setAttribute("userId", ((UserDTO)result.getData()).getId());
+            session.setAttribute("userId", ((UserDTO)result.getData()).getId()+"");
             session.setAttribute("userName", ((UserDTO)result.getData()).getEmail());
             // return "redirect:http://www.mooctest.net/api/test/login";
             LOG.info((String)session.getAttribute("redirectURL"));
             String afterLogin = session.getAttribute("redirectURL")==null?
-                    UrlConstants.DFAULT_GOTO:(String)session.getAttribute("redirectURL");
+                    UrlConstants.DEFAULT_GOTO:(String)session.getAttribute("redirectURL");
+            userLogic.recordLoginAction(request, ((UserDTO)result.getData()).getId() , "password");
             LOG.info("redirectURL: "+afterLogin);
             return "redirect:" + afterLogin;
         }
@@ -105,10 +108,11 @@ public class PageController extends BaseController{
             return "mobile_login";
         }
         HttpSession session = request.getSession();
-        session.setAttribute("userId", ((UserDTO)result.getData()).getId());
+        session.setAttribute("userId", ((UserDTO)result.getData()).getId()+"");
         session.setAttribute("userName", ((UserDTO)result.getData()).getEmail());
+        userLogic.recordLoginAction(request, ((UserDTO)result.getData()).getId(), "mobile");
         String redirectURL = (String) request.getSession().getAttribute("redirectURL");
-        redirectURL = redirectURL==null?UrlConstants.DFAULT_GOTO:redirectURL;
+        redirectURL = redirectURL==null?UrlConstants.DEFAULT_GOTO:redirectURL;
         return "redirect:"+redirectURL;
     }
 
@@ -125,7 +129,7 @@ public class PageController extends BaseController{
             model.addAttribute("result", result);
             return "register";
         }
-        model.addAttribute("href", "http://user.mooctest.net:8081/page/login");
+        model.addAttribute("href", UrlConstants.GO_LOGIN);
         return "success_page";
     }
 
@@ -144,11 +148,12 @@ public class PageController extends BaseController{
         }
         HttpSession session = request.getSession();
         UserDTO user = userLogic.getUserById(((UserThirdParty)result.getData()).getUserId());
-        session.setAttribute("userId", user.getId());
+        session.setAttribute("userId", user.getId()+"");
         session.setAttribute("userName", user.getEmail());
+        userLogic.recordLoginAction(request, user.getId(), "github");
         String redirectUrl = (String)request.getSession().getAttribute("redirectURL");
         if (redirectUrl==null || redirectUrl.isEmpty())
-            redirectUrl = UrlConstants.DFAULT_GOTO;
+            redirectUrl = UrlConstants.DEFAULT_GOTO;
         return "redirect:"+redirectUrl;
     }
 
@@ -165,11 +170,12 @@ public class PageController extends BaseController{
             return "third_party_bind";
         }
         HttpSession session = request.getSession();
-        session.setAttribute("userId", userWechatDTO.getUser().getId());
+        session.setAttribute("userId", userWechatDTO.getUser().getId()+"");
         session.setAttribute("userName", userWechatDTO.getUser().getEmail());
+        userLogic.recordLoginAction(request,userWechatDTO.getUser().getId(), "wechat");
         String redirectUrl = (String) session.getAttribute("redirectURL");
         if (redirectUrl==null || redirectUrl.isEmpty())
-            redirectUrl = UrlConstants.DFAULT_GOTO;
+            redirectUrl = UrlConstants.DEFAULT_GOTO;
         return "redirect:"+redirectUrl;
     }
 
@@ -200,6 +206,8 @@ public class PageController extends BaseController{
             wechatUserInfoDTO.setOpenid(userVO.getOpenid());
             userWechatDTO.setUserInfo(wechatUserInfoDTO);
             wechatLogic.setUserWechat(userWechatDTO);
+            userLogic.recordUserOperation(request, userToBind.getId(), "bind to third party", "wechat");
+            userLogic.recordLoginAction(request, userToBind.getId(), "wechat");
         }else {
             UserThirdParty userThirdParty = new UserThirdParty();
             userThirdParty.setThirdPartyIdentity(userVO.getThirdPartyId());
@@ -208,13 +216,15 @@ public class PageController extends BaseController{
             userThirdParty.setIsDelete(0);
             LOG.info(userThirdParty.getUserId()+"--"+userThirdParty.getThirdPartyIdentity()+"---"+userThirdParty.getType());
             thirdPartyAuthService.save(userThirdParty);
+            userLogic.recordUserOperation(request, userToBind.getId(), "bind to third party", userThirdParty.getType());
+            userLogic.recordLoginAction(request, userToBind.getId(), userThirdParty.getType());
         }
         HttpSession session = request.getSession();
-        session.setAttribute("userId", ((UserDTO)result.getData()).getId());
+        session.setAttribute("userId", ((UserDTO)result.getData()).getId()+"");
         session.setAttribute("userName", ((UserDTO)result.getData()).getEmail());
         String redirectUrl = (String)request.getSession().getAttribute("redirectURL");
         if (redirectUrl==null || redirectUrl.isEmpty())
-            redirectUrl = UrlConstants.DFAULT_GOTO;
+            redirectUrl = UrlConstants.DEFAULT_GOTO;
         return "redirect:"+redirectUrl;
     }
 
@@ -226,13 +236,13 @@ public class PageController extends BaseController{
         }
         if (redirect==null){
             redirect = request.getSession().getAttribute("redirectURL")==null ?
-                    UrlConstants.DFAULT_GOTO : (String) request.getSession().getAttribute("redirectURL");
+                    UrlConstants.DEFAULT_GOTO : (String) request.getSession().getAttribute("redirectURL");
         } else{
             try {
                 redirect = URLDecoder.decode(redirect, "UTF-8");
             } catch (Exception e) {
                 LOG.error("redirectUrl 解码出错", e);
-                redirect = UrlConstants.DFAULT_GOTO;
+                redirect = UrlConstants.DEFAULT_GOTO;
             }
         }
         request.getSession().setAttribute("redirectURL", redirect);

+ 6 - 0
mooctest-user-server/src/main/java/cn/iselab/mooctest/user/web/ctrl/TestController.java

@@ -3,6 +3,7 @@ package cn.iselab.mooctest.user.web.ctrl;
 import cn.iselab.mooctest.rpc.user.data.UserDTO;
 import cn.iselab.mooctest.user.configure.ThirdPartyAuthConfiguration;
 import cn.iselab.mooctest.user.constants.ResponseStatus;
+import cn.iselab.mooctest.user.constants.UrlConstants;
 import cn.iselab.mooctest.user.data.ResponseResult;
 import cn.iselab.mooctest.user.model.VerifyCode;
 import cn.iselab.mooctest.user.service.MailService;
@@ -149,4 +150,9 @@ public class TestController extends BaseController{
         return str;
     }
 
+    @RequestMapping(value = "/test/url", method = RequestMethod.GET)
+    public String tttttt(){
+        return UrlConstants.GO_LOGIN + "\n" + UrlConstants.DEFAULT_GOTO;
+    }
+
 }

+ 72 - 20
mooctest-user-server/src/main/java/cn/iselab/mooctest/user/web/ctrl/UserController.java

@@ -4,12 +4,15 @@ import cn.iselab.mooctest.rpc.user.data.UserDTO;
 import cn.iselab.mooctest.user.constants.ResponseStatus;
 import cn.iselab.mooctest.user.constants.UrlConstants;
 import cn.iselab.mooctest.user.data.ResponseResult;
+import cn.iselab.mooctest.user.model.OperationRecord;
 import cn.iselab.mooctest.user.model.User;
 import cn.iselab.mooctest.user.util.EncryptionUtil;
 import cn.iselab.mooctest.user.util.OSSUtil;
 import cn.iselab.mooctest.user.web.data.BankAccountInfoVO;
+import cn.iselab.mooctest.user.web.data.OperationRecordVO;
 import cn.iselab.mooctest.user.web.data.UserVO;
 import cn.iselab.mooctest.user.web.logic.UserLogic;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Controller;
@@ -29,6 +32,7 @@ import java.util.List;
  * @author sean
  * @date 2018-03-05.
  */
+@Slf4j
 @RestController
 public class UserController extends BaseController {
 
@@ -43,9 +47,11 @@ public class UserController extends BaseController {
         return userLogic.getUserById(id);
     }
 
-    @RequestMapping(value = UrlConstants.API + "userByEmail/{email}", method = RequestMethod.GET)
+    @RequestMapping(value = UrlConstants.API + "userByEmail/{email:.+}", method = RequestMethod.GET)
     public UserDTO getUserByEmail(@PathVariable("email") String email) {
-        return userLogic.getUserByEmail(email);
+        log.info("Email: " + email);
+        UserDTO userByEmail = userLogic.getUserByEmail(email);
+        return userByEmail;
     }
 
     @RequestMapping(value = UrlConstants.API + "user", method = RequestMethod.POST)
@@ -55,80 +61,126 @@ public class UserController extends BaseController {
 
 
     @RequestMapping(value = UrlConstants.API + "login", method = RequestMethod.POST)
-    public ResponseResult<UserDTO> checkLogin(@RequestBody UserDTO user, HttpServletRequest request, HttpServletResponse response){
+    public ResponseResult<UserDTO> checkLogin(@RequestBody UserDTO user, HttpServletRequest request, HttpServletResponse response) {
         String password = EncryptionUtil.encryptMD5(user.getPassword());
         user.setPassword(password);
         ResponseResult<UserDTO> result = userLogic.checkPWD(user);
         if (result.getStatus() == ResponseStatus.SUCCESS) {
             HttpSession session = request.getSession();
-            session.setAttribute("userId", ((UserDTO)result.getData()).getId());
+            session.setAttribute("userId", ((UserDTO) result.getData()).getId() + "");
             // return "redirect:http://www.mooctest.net/api/test/login";
         }
         return result;
     }
 
     @RequestMapping(value = UrlConstants.API + "logout", method = RequestMethod.GET)
-    public ResponseResult<Object> logout(HttpServletRequest request){
+    public ResponseResult<Object> logout(HttpServletRequest request) {
         ResponseResult<Object> result = new ResponseResult<Object>();
         Object userId = request.getSession().getAttribute("userId");
-        if(userId!=null){
+        if (userId != null) {
             request.getSession().removeAttribute("userId");
             request.getSession().invalidate();
             result.init(ResponseStatus.SUCCESS, "用户成功退出", userId);
-            LOG.info("用户成功退出--userId--"+(Long)userId);
-        } else{
+            LOG.info("用户成功退出--userId--" + (String) userId);
+        } else {
             result.init(ResponseStatus.FAILED, "用户未登录", null);
             LOG.info(result.getMsg());
         }
         return result;
     }
 
-    @RequestMapping(value = UrlConstants.API + "mobile/login", method =  RequestMethod.GET)
-    public ResponseResult<Object> mobileLogin(UserVO userVO, HttpServletRequest request){
+    @RequestMapping(value = UrlConstants.API + "mobile/login", method = RequestMethod.GET)
+    public ResponseResult<Object> mobileLogin(UserVO userVO, HttpServletRequest request) {
         return null;
     }
 
     @RequestMapping(value = UrlConstants.API + "verify/mail", method = RequestMethod.PUT)
-    public ResponseResult<String> sendVerifyEmail(UserDTO userDTO){
+    public ResponseResult<String> sendVerifyEmail(UserDTO userDTO) {
         ResponseResult<String> result = new ResponseResult<>();
         result = userLogic.sendVerifyEmail(userDTO);
         return result;
     }
 
     @RequestMapping(value = UrlConstants.API + "verify/mobile", method = RequestMethod.PUT)
-    public ResponseResult<String> sendVerifyMobileMessage(UserDTO userDTO){
+    public ResponseResult<String> sendVerifyMobileMessage(UserDTO userDTO) {
+        return userLogic.sendMobileVerfication(userDTO);
+    }
+
+    /**
+     * 非本项目的登录注册界面中的邮箱验证码获取,此时需要传值为json格式
+     *
+     * @param userDTO
+     * @return
+     */
+    @RequestMapping(value = UrlConstants.API + "verify/mail/new", method = RequestMethod.PUT)
+    public ResponseResult<String> sendVerifyEmailNew(@RequestBody UserDTO userDTO) {
+        return userLogic.sendVerifyEmail(userDTO);
+    }
+
+    /**
+     * 非本项目的登录注册界面中的手机验证码获取,此时需要传值为json格式
+     *
+     * @param userDTO
+     * @return
+     */
+    @RequestMapping(value = UrlConstants.API + "verify/mobile/new", method = RequestMethod.PUT)
+    public ResponseResult<String> sendVerifyMobileMessageNew(@RequestBody UserDTO userDTO) {
         return userLogic.sendMobileVerfication(userDTO);
     }
 
     @RequestMapping(value = UrlConstants.API + "password/reset", method = RequestMethod.PUT)
-    public ResponseResult<UserVO> resetPassword(@RequestBody UserVO userVO){
+    public ResponseResult<UserVO> resetPassword(@RequestBody UserVO userVO) {
         return userLogic.resetPassword(userVO);
     }
 
     @RequestMapping(value = UrlConstants.API + "user/password", method = RequestMethod.PUT)
-    public ResponseResult<UserVO> updatePassword(@RequestBody UserVO userVO, HttpServletRequest request){
+    public ResponseResult<UserVO> updatePassword(@RequestBody UserVO userVO, HttpServletRequest request) {
         return userLogic.updateUserPassword(userVO, request);
     }
 
+    @RequestMapping(value = UrlConstants.API + "user/password/new", method = RequestMethod.PUT)
+    public ResponseResult<UserVO> updatePasswordNew(@RequestBody UserVO userVO, HttpServletRequest request) {
+        return userLogic.updateUserPasswordNew(userVO, request);
+    }
+
     @RequestMapping(value = UrlConstants.API + "user/email", method = RequestMethod.PUT)
-    public ResponseResult<UserVO> updateEmail(@RequestBody UserVO userVO, HttpServletRequest request){
-        return userLogic.updateUserEmail(userVO, request);
+    public ResponseResult<UserVO> updateEmail(@RequestBody UserVO userVO, HttpServletRequest request) {
+        ResponseResult<UserVO> responseResult = userLogic.updateUserEmail(userVO, request);
+        return responseResult;
     }
 
     @RequestMapping(value = UrlConstants.API + "user/mobile", method = RequestMethod.PUT)
-    public ResponseResult<UserVO> updateMobile(@RequestBody UserVO userVO, HttpServletRequest request){
+    public ResponseResult<UserVO> updateMobile(@RequestBody UserVO userVO, HttpServletRequest request) {
         return userLogic.updateUserMobile(userVO, request);
     }
 
+    /**
+     * 验证旧手机号和验证码
+     *
+     * @param userVO
+     * @param request
+     * @return
+     */
+    @RequestMapping(value = UrlConstants.API + "user/old/mobile", method = RequestMethod.PUT)
+    public ResponseResult<UserVO> verifyOldMobile(@RequestBody UserVO userVO, HttpServletRequest request) {
+        return userLogic.verifyOldMobile(userVO, request);
+    }
+
     @RequestMapping(value = UrlConstants.API + "bankInfo", method = RequestMethod.POST)
-    public ModelAndView setBankInfo(BankAccountInfoVO infoVO, HttpServletRequest request){
+    public ModelAndView setBankInfo(BankAccountInfoVO infoVO, HttpServletRequest request) {
         ResponseResult<Object> result = userLogic.setBankInfo(infoVO, request);
-        if (result.getStatus()==ResponseStatus.SUCCESS){
+        if (result.getStatus() == ResponseStatus.SUCCESS) {
             // return new ModelAndView("redirect:"+(String) request.getSession().getAttribute("redirectURL"));
-            return new ModelAndView("success_page").addObject("message","银行账户信息上传成功!");
+            userLogic.recordUserOperation(request, Long.parseLong((String) request.getSession().getAttribute("userId")), "Upload Bank Info", "user center");
+            return new ModelAndView("success_page").addObject("message", "银行账户信息上传成功!");
         }
         ModelAndView modelAndView = new ModelAndView("error_page");
         modelAndView.addObject("message", result.getMsg());
         return modelAndView;
     }
+
+    @RequestMapping(value = UrlConstants.API + "operation_record", method = RequestMethod.POST)
+    public void recordUserOperation(@RequestBody OperationRecordVO recordVO) {
+        userLogic.recordUserOperation(recordVO.toOperationRecord());
+    }
 }

+ 37 - 0
mooctest-user-server/src/main/java/cn/iselab/mooctest/user/web/data/OperationRecordVO.java

@@ -0,0 +1,37 @@
+package cn.iselab.mooctest.user.web.data;
+
+import cn.iselab.mooctest.user.model.OperationRecord;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.springframework.beans.BeanUtils;
+
+import java.sql.Timestamp;
+
+/**
+ * @author: Diors.Po
+ * @Email: 171256175@qq.com
+ * @date 2019-09-15 22:19
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class OperationRecordVO {
+
+    private Long id;
+    private String ip;
+    private Long userId;
+    private String operation;
+    private String resource;
+    private Timestamp createTime;
+
+    public OperationRecordVO(OperationRecord record){
+        BeanUtils.copyProperties(record, this);
+    }
+
+    public OperationRecord toOperationRecord(){
+        OperationRecord record = new OperationRecord();
+        BeanUtils.copyProperties(this, record);
+        return record;
+    }
+}

+ 16 - 0
mooctest-user-server/src/main/java/cn/iselab/mooctest/user/web/logic/UserLogic.java

@@ -3,10 +3,12 @@ package cn.iselab.mooctest.user.web.logic;
 import cn.iselab.mooctest.rpc.user.data.UserDTO;
 import cn.iselab.mooctest.user.constants.ResponseStatus;
 import cn.iselab.mooctest.user.data.ResponseResult;
+import cn.iselab.mooctest.user.model.OperationRecord;
 import cn.iselab.mooctest.user.web.data.BankAccountInfoVO;
 import cn.iselab.mooctest.user.web.data.UserVO;
 
 import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpSession;
 import java.util.List;
 
 /**
@@ -53,13 +55,27 @@ public interface UserLogic {
 
     ResponseResult<UserVO> updateUserPassword(UserVO userVO, HttpServletRequest request);
 
+    ResponseResult<UserVO> updateUserPasswordNew(UserVO userVO, HttpServletRequest request);
+
     ResponseResult<UserVO> updateUserEmail(UserVO userVO, HttpServletRequest request);
 
     ResponseResult<UserVO> updateUserMobile(UserVO userVO, HttpServletRequest request);
 
+    ResponseResult<UserVO> verifyOldMobile(UserVO userVO, HttpServletRequest request);
+
     ResponseResult<Object> setBankInfo(BankAccountInfoVO infoVO, HttpServletRequest request);
 
     void saveRedirectUrl(String redirect, HttpServletRequest request);
 
+    void recordLoginAction(HttpServletRequest request, Long userId, String resource);
+
+    void recordLogoutAction(HttpServletRequest request, Long userId, String resource);
+
+    void recordUserOperation(HttpServletRequest request, Long userId, String operation, String resource);
+
+    void recordUserOperation(OperationRecord record);
+
+    void recordUserOperation(String ip, Long userId, String operation, String resource);
+
     Boolean isLogin(HttpServletRequest request);
 }

+ 1 - 1
mooctest-user-server/src/main/java/cn/iselab/mooctest/user/web/logic/impl/ThirdPartyLogicImpl.java

@@ -50,7 +50,7 @@ public class ThirdPartyLogicImpl extends BaseLogic implements ThirdPartyLogic {
             return result;
         }
         result.init(ResponseStatus.SUCCESS, "登录成功", userThirdParty);
-        request.getSession().setAttribute("userId", userThirdParty.getUserId());
+        request.getSession().setAttribute("userId", userThirdParty.getUserId()+"");
         LOG.info(result.getMsg());
         return result;
     }

+ 176 - 17
mooctest-user-server/src/main/java/cn/iselab/mooctest/user/web/logic/impl/UserLogicImpl.java

@@ -5,10 +5,7 @@ import cn.iselab.mooctest.user.configure.MailProperties;
 import cn.iselab.mooctest.user.constants.VerifyConstants;
 import cn.iselab.mooctest.user.constants.ResponseStatus;
 import cn.iselab.mooctest.user.data.ResponseResult;
-import cn.iselab.mooctest.user.model.BankAccountInfo;
-import cn.iselab.mooctest.user.model.User;
-import cn.iselab.mooctest.user.model.UserIntegral;
-import cn.iselab.mooctest.user.model.VerifyCode;
+import cn.iselab.mooctest.user.model.*;
 import cn.iselab.mooctest.user.service.*;
 import cn.iselab.mooctest.user.util.EncryptionUtil;
 import cn.iselab.mooctest.user.util.MSUtil;
@@ -21,13 +18,16 @@ import cn.iselab.mooctest.user.web.exception.HttpBadRequestException;
 import cn.iselab.mooctest.user.web.logic.BaseLogic;
 import cn.iselab.mooctest.user.web.logic.UserLogic;
 import cn.iselab.mooctest.user.web.wrapper.UserWrapper;
+import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.codec.binary.Base64;
 import org.apache.commons.validator.routines.EmailValidator;
+import org.apache.zookeeper.Op;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import javax.mail.MessagingException;
 import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpSession;
 import java.io.UnsupportedEncodingException;
 import java.net.URLDecoder;
 import java.net.URLEncoder;
@@ -38,6 +38,7 @@ import java.util.List;
  * @author sean
  * @date 2018-03-04.
  */
+@Slf4j
 @Service
 public class UserLogicImpl extends BaseLogic implements UserLogic {
 
@@ -70,11 +71,13 @@ public class UserLogicImpl extends BaseLogic implements UserLogic {
 
     @Autowired
     private BankAccountInfoService bankAccountInfoService;
+    private String userId;
 
     @Override
     public UserDTO getUserByEmail(String s) {
         User user = userService.findByEmail(s);
         if (user == null) {
+            log.error("There is not this email");
             return null;
         }
         UserDTO dto = userWrapper.wrap(user);
@@ -326,6 +329,7 @@ public class UserLogicImpl extends BaseLogic implements UserLogic {
 //            LOG.error(result.getMsg());
 //            return result;
 //        }
+        System.out.println(userDTO.getEmail());
         if (!EmailValidator.getInstance().isValid(userDTO.getEmail())){
             result.init(ResponseStatus.FAILED, "邮箱输入非法", receiver);
             LOG.error(result.getMsg());
@@ -419,7 +423,7 @@ public class UserLogicImpl extends BaseLogic implements UserLogic {
         }
         User user = userService.findByMobile(mobile);
         if (user == null){
-            result.init(ResponseStatus.FAILED, "该手机号未绑定慕测账号", userVO);
+            result.init(ResponseStatus.FAILED, "该手机号未绑定平台账号", userVO);
             LOG.error(result.getMsg() + userVO.getMobile());
             return result;
         }
@@ -476,7 +480,7 @@ public class UserLogicImpl extends BaseLogic implements UserLogic {
             }
             User user = userService.findByMobile(userVO.getMobile());
             if (user == null){
-                result.init(ResponseStatus.FAILED, "该手机号未绑定慕测账号", userVO);
+                result.init(ResponseStatus.FAILED, "该手机号未绑定平台账号", userVO);
                 LOG.error(result.getMsg() + userVO.getMobile());
                 return result;
             }
@@ -549,7 +553,7 @@ public class UserLogicImpl extends BaseLogic implements UserLogic {
     @Override
     public ResponseResult<UserVO> updateUserPassword(UserVO userVO, HttpServletRequest request){
         ResponseResult<UserVO> result = new ResponseResult<>();
-        Long userId = (Long) request.getSession().getAttribute("userId");
+        Long userId = Long.parseLong((String) request.getSession().getAttribute("userId"));
         try {
             if (userId == null)
                 throw new Exception("用户未登录");
@@ -581,16 +585,48 @@ public class UserLogicImpl extends BaseLogic implements UserLogic {
     }
 
     @Override
+    public ResponseResult<UserVO> updateUserPasswordNew(UserVO userVO, HttpServletRequest request){
+        ResponseResult<UserVO> result = new ResponseResult<>();
+        Long userId = userVO.getId();
+        User user = userService.findById(userId);
+        try {
+            if(userId == null)
+                throw new Exception("用户未登录");
+            if (userVO.getPassword().length() > 16 || userVO.getPassword().length() < 6){
+                throw new Exception("密码长度应在6-16位");
+            }
+            if (!EncryptionUtil.encryptMD5(userVO.getOldPassword()).equals(user.getPassword()))
+                throw new Exception("旧密码错误");
+
+            String password = EncryptionUtil.encryptMD5(userVO.getPassword());
+            user.setPassword(password);
+            user = userService.update(user);
+            userVO = userVOWrapper.wrap(user);
+            userVO.setPassword("");
+            userVO.setPassword2("");
+            result.init(ResponseStatus.SUCCESS, "密码修改成功", userVO);
+            LOG.info(result.getMsg()+" userId: "+userVO.getId());
+            request.getSession().removeAttribute("userId");
+            request.getSession().invalidate();
+        } catch (Exception e) {
+            result.init(ResponseStatus.FAILED, e.getMessage(), userVO);
+            LOG.error(result.getMsg(),e);
+            return result;
+        }
+        return result;
+    }
+
+    @Override
     public ResponseResult<UserVO> updateUserEmail(UserVO userVO, HttpServletRequest request) {
         ResponseResult<UserVO> result = new ResponseResult<>();
-        Long userId = (Long) request.getSession().getAttribute("userId");
+        Long userId = userVO.getId();
+        User user = userService.findById(userId);
         try {
-            if (userId == null)
+            if(userId == null || !user.getPassword().equals(userVO.getPassword()))
                 throw new Exception("用户未登录");
             if (!verifyCodeService.validateVerifyCode("email", userVO.getEmail(), userVO.getVerifyCode()))
                 throw new Exception("验证码或邮箱填写错误");
-            User user = userService.findById(userId);
-            if (!userVO.getEmail().equals(user.getEmail()) && userService.findByEmail(userVO.getEmail()) != null)
+            if (userVO.getEmail().equals(user.getEmail()) || userService.findByEmail(userVO.getEmail()) != null)
                 throw new Exception("该邮箱已被注册");
             user.setEmail(userVO.getEmail());
             userVO = userVOWrapper.wrap(userService.update(user));
@@ -607,18 +643,18 @@ public class UserLogicImpl extends BaseLogic implements UserLogic {
     @Override
     public ResponseResult<UserVO> updateUserMobile(UserVO userVO, HttpServletRequest request) {
         ResponseResult<UserVO> result = new ResponseResult<>();
-        Long userId = (Long) request.getSession().getAttribute("userId");
+        Long userId = userVO.getId();
+        User user = userService.findById(userId);
         try {
-            if (userId == null)
+            if(userId == null || !user.getPassword().equals(userVO.getPassword()))
                 throw new Exception("用户未登录");
             if (!verifyCodeService.validateVerifyCode("mobile", userVO.getMobile(), userVO.getVerifyCode()))
                 throw new Exception("验证码或手机号填写错误");
-            User user = userService.findById(userId);
-            if (!userVO.getMobile().equals(user.getMobile()) && userService.findByMobile(userVO.getMobile()) != null)
+            if (userVO.getMobile().equals(user.getMobile()) || userService.findByMobile(userVO.getMobile()) != null)
                 throw new Exception("该手机号码已被绑定");
             user.setMobile(userVO.getMobile());
             userVO = userVOWrapper.wrap(userService.update(user));
-            result.init(ResponseStatus.SUCCESS, "手机号修改成功", userVO);
+            result.init(ResponseStatus.SUCCESS, "手机号绑定成功", userVO);
             LOG.info(result.getMsg() + " userId: "+ userVO.getId() + " mobile: " + userVO.getMobile());
         } catch (Exception e){
             result.init(ResponseStatus.FAILED, e.getMessage(), userVO);
@@ -629,6 +665,28 @@ public class UserLogicImpl extends BaseLogic implements UserLogic {
     }
 
     @Override
+    public ResponseResult<UserVO> verifyOldMobile(UserVO userVO, HttpServletRequest request) {
+        ResponseResult<UserVO> result = new ResponseResult<>();
+        Long userId = userVO.getId();
+        User user = userService.findById(userId);
+        try {
+            if(userId == null || !user.getPassword().equals(userVO.getPassword()))
+                throw new Exception("用户未登录");
+            if (!verifyCodeService.validateVerifyCode("mobile", userVO.getMobile(), userVO.getVerifyCode()))
+                throw new Exception("验证码或手机号填写错误");
+            if (!userVO.getMobile().equals(user.getMobile()))
+                throw new Exception("此手机号不是用户绑定的手机号");
+            LOG.info(result.getMsg() + "旧手机验证成功 userId: "+ userVO.getId() + " mobile: " + userVO.getMobile());
+            result.init(ResponseStatus.SUCCESS, "验证成功", userVO);
+        } catch (Exception e){
+            result.init(ResponseStatus.FAILED, e.getMessage(), userVO);
+            LOG.info(result.getMsg(), e);
+            return result;
+        }
+        return result;
+    }
+
+    @Override
     public ResponseResult<Object> setBankInfo(BankAccountInfoVO infoVO, HttpServletRequest request) {
         try {
             infoVO.setId_card_front_url(ossUtil.upload(infoVO.getID_card_front(), OSSUtil.FileDirType.BANKINFO));
@@ -636,7 +694,7 @@ public class UserLogicImpl extends BaseLogic implements UserLogic {
         }catch (Exception e){
             return new ResponseResult<Object>(ResponseStatus.FAILED, "上传失败,请稍后再试",null);
         }
-        infoVO.setUser_id((Long) request.getSession().getAttribute("userId"));
+        infoVO.setUser_id(Long.parseLong((String) request.getSession().getAttribute("userId")));
         BankAccountInfo info = bankAccountInfoService.setBankAccountInfo(bankAccountInfoVOWrapper.unwrap(infoVO));
         if (info==null){
             return new ResponseResult<Object>(ResponseStatus.FAILED, "上传出错,请稍后再试",null);
@@ -664,5 +722,106 @@ public class UserLogicImpl extends BaseLogic implements UserLogic {
         return true;
     }
 
+    @Override
+    public void recordLoginAction(HttpServletRequest request, Long userId, String resource) {
+        OperationRecord record = this.buildUserOperation(request,userId,resource);
+        if(record==null)
+            return;
+        record.setOperation("Login");
+        userService.recordOperation(record);
+        Timestamp current = new Timestamp(System.currentTimeMillis());
+        log.info(String.format("User[%d] Login at [%s] IP(%s)",userId,current.toString(), record.getIp()));
+    }
+
+    @Override
+    public void recordLogoutAction(HttpServletRequest request, Long userId, String resource) {
+        OperationRecord userOperation = this.buildUserOperation(request,userId, resource);
+        if(userOperation==null)
+            return;
+        userOperation.setOperation("Logout");
+        userService.recordOperation(userOperation);
+        Timestamp current = new Timestamp(System.currentTimeMillis());
+        log.info(String.format("User[%d] Logout at [%s]",userId,current.toString()));
+    }
+
+    @Override
+    public void recordUserOperation(HttpServletRequest request, Long userId, String operation, String resource) {
+        OperationRecord record = this.buildUserOperation(request, userId, resource);
+        record.setOperation(operation);
+        userService.recordOperation(record);
+        Timestamp current = new Timestamp(System.currentTimeMillis());
+        log.info(String.format("User[%d] [%s] at [%s]", userId, operation,current.toString()));
+    }
+
+    @Override
+    public void recordUserOperation(OperationRecord record) {
+        userService.recordOperation(record);
+        Timestamp current = new Timestamp(System.currentTimeMillis());
+        log.info(String.format("User[%d] [%s] at [%s]",record.getUserId(),record.getOperation(),current.toString()));
+    }
+
+    @Override
+    public void recordUserOperation(String ip, Long userId, String operation, String resource) {
+        OperationRecord record = this.buildUserOperation(ip, userId, resource);
+        record.setOperation(operation);
+        userService.recordOperation(record);
+        Timestamp current = new Timestamp(System.currentTimeMillis());
+        log.info(String.format("User[%d] [%s] at [%s]", userId, operation,current.toString()));
+    }
+
+    private OperationRecord buildUserOperation(HttpServletRequest request, Long userId, String resource) {
+        String ip = this.getRequestIp(request);
+        if("101.37.78.167".equals(ip)) {
+            return null;
+        }
+        OperationRecord userOperation = new OperationRecord();
+        userOperation.setIp(ip);
+        userOperation.setUserId(userId);
+        userOperation.setResource(resource);
+        return userOperation;
+    }
+
+    private OperationRecord buildUserOperation(String ip, Long userId, String resource) {
+        if("101.37.78.167".equals(ip)) {
+            return null;
+        }
+        OperationRecord userOperation = new OperationRecord();
+        userOperation.setIp(ip);
+        userOperation.setUserId(userId);
+        userOperation.setResource(resource);
+        return userOperation;
+    }
+
+    private String getRequestIp(HttpServletRequest request){
+        String ip = request.getHeader("x-forwarded-for");
+        if (isNotValidIP(ip)) {
+            ip = request.getHeader("Proxy-Client-IP");
+        }
+        if (isNotValidIP(ip)) {
+            ip = request.getHeader("WL-Proxy-Client-IP");
+        }
+        if (isNotValidIP(ip)) {
+            ip = request.getRemoteAddr();
+        }
+        if (isNotValidIP(ip)) {
+            ip = request.getHeader("http_client_ip");
+        }
+        if (isNotValidIP(ip)) {
+            ip = request.getHeader("HTTP_X_FORWARDED_FOR");
+        }
+        if (ip.equals("0:0:0:0:0:0:0:1")) {
+            ip = "127.0.0.1";
+        }
+        if (ip.split(",").length > 1) {
+            ip = ip.split(",")[0];
+        }
+        return ip;
+    }
+
+    private boolean isNotValidIP(String ip) {
+        return ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip);
+    }
+
+
 
 }

+ 1 - 1
mooctest-user-server/src/main/resources/bootstrap.yaml

@@ -1,4 +1,4 @@
-spring.profiles.active: dev
+spring.profiles.active: localhost
 spring:
   application:
     name: mooctest-user-server

+ 2 - 2
mooctest-user-server/src/main/resources/templates/common/common_head.html

@@ -2,8 +2,8 @@
 <html lang="en" xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org">
 <head th:fragment="head(title)">
     <meta charset="UTF-8">
-    <title th:text="${title}">MOOCTEST</title>
-    <!--<title>MOOCTEST</title>-->
+    <title th:text="${title}">众测服务平台</title>
+    <!--<title>众测服务平台</title>-->
     <link rel="stylesheet" type="text/css" th:href="@{/vendor/bootstrap/css/bootstrap.min.css}">
     <link rel="stylesheet" type="text/css" th:href="@{/fonts/font-awesome-4.7.0/css/font-awesome.min.css}">
     <link rel="stylesheet" type="text/css" th:href="@{/fonts/iconic/css/material-design-iconic-font.min.css}">

+ 1 - 1
mooctest-user-server/src/main/resources/templates/email/arrears_mail.html

@@ -2,7 +2,7 @@
 <html lang="en" xmlns:th="http://www.thymeleaf.org">
 <head>
     <meta charset="UTF-8">
-    <title>【慕测科技】通知邮件</title>
+    <title>【众测服务平台】通知邮件</title>
 </head>
 <body>
 尊敬的管理员:<br>

+ 1 - 1
mooctest-user-server/src/main/resources/templates/email/verify_mail.html

@@ -2,7 +2,7 @@
 <html lang="en" xmlns:th="http://www.thymeleaf.org">
 <head>
     <meta charset="UTF-8">
-    <title>【慕测科技】验证邮件</title>
+    <title>【众测服务平台】验证邮件</title>
 </head>
 <body>
 尊敬的用户:<br>

+ 1 - 1
mooctest-user-server/src/main/resources/templates/forget_password.html

@@ -6,7 +6,7 @@
     <meta charset="UTF-8">
     <meta name="viewport" content="width=device-width, initial-scale=1">
 
-    <title>慕测平台</title>
+    <title>众测服务平台</title>
     <meta name="keywords" content="" />
     <meta name="description" content="" />
 

+ 1 - 1
mooctest-user-server/src/main/resources/templates/forget_password_email.html

@@ -6,7 +6,7 @@
     <meta charset="UTF-8">
     <meta name="viewport" content="width=device-width, initial-scale=1">
 
-    <title>慕测平台</title>
+    <title>众测服务平台</title>
     <meta name="keywords" content="" />
     <meta name="description" content="" />
 

+ 1 - 1
mooctest-user-server/src/main/resources/templates/forget_password_mobile.html

@@ -6,7 +6,7 @@
     <meta charset="UTF-8">
     <meta name="viewport" content="width=device-width, initial-scale=1">
 
-    <title>慕测平台</title>
+    <title>众测服务平台</title>
     <meta name="keywords" content="" />
     <meta name="description" content="" />
 

+ 1 - 1
mooctest-user-server/src/main/resources/templates/forget_password_reset.html

@@ -6,7 +6,7 @@
     <meta charset="UTF-8">
     <meta name="viewport" content="width=device-width, initial-scale=1">
 
-    <title>慕测平台</title>
+    <title>众测服务平台</title>
     <meta name="keywords" content="" />
     <meta name="description" content="" />
 

+ 1 - 1
mooctest-user-server/src/main/resources/templates/index.html

@@ -27,7 +27,7 @@
 						<img style="width: 80px;" th:src="@{/images/mooctest.png}" >
 					</div>
 
-					<span class="login100-form-title p-b-30">MOOCTEST</span>
+					<span class="login100-form-title p-b-30">众测服务平台</span>
 
 					<div class="wrap-input100 validate-input m-b-23" data-validate="请输入用户名">
 						<span class="label-input100">邮箱</span>

+ 2 - 2
mooctest-user-server/src/main/resources/templates/login.html

@@ -6,7 +6,7 @@
     <meta charset="UTF-8">
     <meta name="viewport" content="width=device-width, initial-scale=1">
 
-    <title>慕测平台</title>
+    <title>众测服务平台</title>
     <meta name="keywords" content="" />
     <meta name="description" content="" />
 
@@ -27,7 +27,7 @@
                     <img style="width: 80px;" th:src="@{/images/mooctest.png}" >
                 </div>
 
-                <span class="login100-form-title p-b-30">MOOCTEST</span>
+                <span class="login100-form-title p-b-30">众测服务平台</span>
 
                 <div class="wrap-input100 validate-input m-b-23" data-validate="请输入用户名">
                     <span class="label-input100">邮箱</span>

+ 2 - 2
mooctest-user-server/src/main/resources/templates/mobile_login.html

@@ -6,7 +6,7 @@
     <meta charset="UTF-8">
     <meta name="viewport" content="width=device-width, initial-scale=1">
 
-    <title>慕测平台</title>
+    <title>众测服务平台</title>
     <meta name="keywords" content="" />
     <meta name="description" content="" />
 
@@ -27,7 +27,7 @@
                     <img style="width: 80px;" th:src="@{/images/mooctest.png}" >
                 </div>
 
-                <span class="login100-form-title p-b-30">MOOCTEST</span>
+                <span class="login100-form-title p-b-30">众测服务平台</span>
 
                 <div class="wrap-input100 validate-input m-b-23" data-validate="请输入手机号">
                     <span class="label-input100">手机号</span>

+ 1 - 1
mooctest-user-server/src/main/resources/templates/register.html

@@ -27,7 +27,7 @@
                     <img style="width: 80px;" th:src="@{/images/mooctest.png}" >
                 </div>
 
-                <span class="login100-form-title p-b-5">MOOCTEST</span>
+                <span class="login100-form-title p-b-5">众测服务平台</span>
 
                 <div class="wrap-input100 validate-input" data-validate="请输入邮箱">
                     <!--<span class="label-input100">邮箱</span>-->

+ 2 - 2
mooctest-user-server/src/main/resources/templates/reset_email.html

@@ -6,7 +6,7 @@
     <meta charset="UTF-8">
     <meta name="viewport" content="width=device-width, initial-scale=1">
 
-    <title>慕测平台</title>
+    <title>众测服务平台</title>
     <meta name="keywords" content="" />
     <meta name="description" content="" />
 
@@ -84,7 +84,7 @@
             url:"/api/verify/mail",
             type:"PUT",
             data:data,
-            timeout: 3000,
+            timeout: 6000,
             success:function (result) {
                 console.log(result);
                 if (result.status != 2000) {

+ 1 - 1
mooctest-user-server/src/main/resources/templates/reset_mobile.html

@@ -6,7 +6,7 @@
     <meta charset="UTF-8">
     <meta name="viewport" content="width=device-width, initial-scale=1">
 
-    <title>慕测平台</title>
+    <title>众测服务平台</title>
     <meta name="keywords" content="" />
     <meta name="description" content="" />
 

+ 1 - 1
mooctest-user-server/src/main/resources/templates/reset_password.html

@@ -6,7 +6,7 @@
     <meta charset="UTF-8">
     <meta name="viewport" content="width=device-width, initial-scale=1">
 
-    <title>慕测平台</title>
+    <title>众测服务平台</title>
     <meta name="keywords" content="" />
     <meta name="description" content="" />
 

+ 2 - 2
mooctest-user-server/src/main/resources/templates/third_party_bind.html

@@ -6,7 +6,7 @@
     <meta charset="UTF-8">
     <meta name="viewport" content="width=device-width, initial-scale=1">
 
-    <title>慕测平台</title>
+    <title>众测服务平台</title>
     <meta name="keywords" content="" />
     <meta name="description" content="" />
 
@@ -28,7 +28,7 @@
                     <img  style="width: 80px; border-radius: 50%;" th:src="${headImg}" >
                 </div>
 
-                <span class="login100-form-title p-b-30" th:text="${thirdPartyName}">MOOCTEST</span>
+                <span class="login100-form-title p-b-30" th:text="${thirdPartyName}">众测服务平台</span>
                 <input id="thirdPartyName" name="thirdPartyName" type="hidden" th:value="${thirdPartyName}">
                 <input id="thirdPartyId" name="thirdPartyId" type="hidden" th:value="${thirdPartyId}">
                 <input id="from" name="from" type="hidden" th:value="${from}">

+ 1 - 1
mooctest-user-server/src/main/resources/templates/upload_card_info.html

@@ -5,7 +5,7 @@
     <meta charset="UTF-8">
     <meta name="viewport" content="width=device-width, initial-scale=1">
 
-    <title>慕测平台</title>
+    <title>众测服务平台</title>
     <meta name="keywords" content="" />
     <meta name="description" content="" />