Quellcode durchsuchen

开发注册功能

wuxw7 vor 7 Jahren
Ursprung
Commit
edebab5997

Datei-Diff unterdrückt, da er zu groß ist
+ 774 - 1908
MicroCommunity.sql


+ 44 - 0
WebService/src/main/java/com/java110/web/components/RegisterComponent.java

@@ -0,0 +1,44 @@
+package com.java110.web.components;
+
+import com.java110.core.context.IPageData;
+import com.java110.web.smo.IRegisterServiceSMO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+import org.springframework.stereotype.Component;
+
+/**
+ * 用户注册事件
+ * Created by wuxw on 2019/3/23.
+ */
+@Component("register")
+public class RegisterComponent {
+
+
+    @Autowired
+    IRegisterServiceSMO registerServiceSMOImpl;
+    /**
+     * 用户注册
+     * @param pd 页面封装数据
+     * @return
+     */
+    public ResponseEntity<String> doRegister(IPageData pd){
+        ResponseEntity<String> responseEntity = null;
+        try{
+            responseEntity =  registerServiceSMOImpl.doRegister(pd);
+        }catch (Exception e){
+            responseEntity = new ResponseEntity<String>(e.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR);
+        }finally {
+            return responseEntity;
+        }
+    }
+
+
+    public IRegisterServiceSMO getRegisterServiceSMOImpl() {
+        return registerServiceSMOImpl;
+    }
+
+    public void setRegisterServiceSMOImpl(IRegisterServiceSMO registerServiceSMOImpl) {
+        this.registerServiceSMOImpl = registerServiceSMOImpl;
+    }
+}

+ 6 - 0
WebService/src/main/java/com/java110/web/components/ValidateCodeComponent.java

@@ -16,6 +16,12 @@ public class ValidateCodeComponent {
 
     @Autowired
     private ILoginServiceSMO loginServiceSMOImpl;
+
+    /**
+     * 生成 验证码
+     * @param pd
+     * @return
+     */
     public ResponseEntity<String> generateValidateCode(IPageData pd){
 
         ResponseEntity<String> responseEntity = null;

+ 45 - 0
WebService/src/main/java/com/java110/web/components/ValidateTelComponent.java

@@ -0,0 +1,45 @@
+package com.java110.web.components;
+
+import com.java110.core.context.IPageData;
+import com.java110.web.smo.IRegisterServiceSMO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+import org.springframework.stereotype.Component;
+
+/**
+ * 手机验证码校验组件
+ * Created by wuxw on 2019/3/23.
+ */
+
+@Component("validate-tel")
+public class ValidateTelComponent {
+
+    @Autowired
+    IRegisterServiceSMO registerServiceSMOImpl;
+    /**
+     * 手机发送验证码
+     * @param pd
+     * @return
+     */
+    public ResponseEntity<String> sendTelMessageCode(IPageData pd){
+
+        ResponseEntity<String> responseEntity = null;
+        try{
+            responseEntity =  registerServiceSMOImpl.sendTelMessageCode(pd);
+        }catch (Exception e){
+            responseEntity = new ResponseEntity<String>(e.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR);
+        }finally {
+            return responseEntity;
+        }
+    }
+
+
+    public IRegisterServiceSMO getRegisterServiceSMOImpl() {
+        return registerServiceSMOImpl;
+    }
+
+    public void setRegisterServiceSMOImpl(IRegisterServiceSMO registerServiceSMOImpl) {
+        this.registerServiceSMOImpl = registerServiceSMOImpl;
+    }
+}

+ 27 - 0
WebService/src/main/java/com/java110/web/smo/IRegisterServiceSMO.java

@@ -0,0 +1,27 @@
+package com.java110.web.smo;
+
+import com.java110.core.context.IPageData;
+import org.springframework.http.ResponseEntity;
+
+/**
+ *
+ * 注册业务处理接口
+ *
+ * Created by wuxw on 2019/3/23.
+ */
+public interface IRegisterServiceSMO {
+
+    /**
+     * 用户注册
+     * @param pd
+     * @return
+     */
+    public ResponseEntity<String> doRegister(IPageData pd);
+
+    /**
+     * 发送手机验证码
+     * @param pd
+     * @return
+     */
+    public ResponseEntity<String> sendTelMessageCode(IPageData pd);
+}

+ 0 - 8
WebService/src/main/java/com/java110/web/smo/impl/LoginServiceSMOImpl.java

@@ -18,8 +18,6 @@ import org.springframework.http.ResponseEntity;
 import org.springframework.stereotype.Service;
 import org.springframework.web.client.RestTemplate;
 
-import java.util.Random;
-
 /**
  * 登录信息实现类
  * Created by wuxw on 2019/3/20.
@@ -29,12 +27,6 @@ import java.util.Random;
 public class LoginServiceSMOImpl extends BaseComponentSMO implements ILoginServiceSMO {
     private final static Logger logger = LoggerFactory.getLogger(LoginServiceSMOImpl.class);
 
-
-    private static char[] chs = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".toCharArray();
-    private static final int NUMBER_OF_CHS = 4;
-    private static final int IMG_WIDTH = 65;
-    private static final int IMG_HEIGHT = 25;
-    private static Random r = new Random();
     @Autowired
     private RestTemplate restTemplate;
 

+ 92 - 0
WebService/src/main/java/com/java110/web/smo/impl/RegisterServiceSMOImpl.java

@@ -0,0 +1,92 @@
+package com.java110.web.smo.impl;
+
+import com.alibaba.fastjson.JSONObject;
+import com.java110.common.cache.CommonCache;
+import com.java110.common.constant.ServiceConstant;
+import com.java110.common.util.Assert;
+import com.java110.core.context.IPageData;
+import com.java110.core.factory.AliSendMessageFactory;
+import com.java110.core.factory.AuthenticationFactory;
+import com.java110.core.factory.ValidateCodeFactory;
+import com.java110.web.core.BaseComponentSMO;
+import com.java110.web.smo.IRegisterServiceSMO;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpMethod;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+import org.springframework.stereotype.Service;
+import org.springframework.web.client.RestTemplate;
+
+/**
+ *
+ * 用户注册业务处理类
+ *
+ * Created by wuxw on 2019/3/23.
+ */
+@Service("registerServiceSMOImpl")
+public class RegisterServiceSMOImpl extends BaseComponentSMO implements IRegisterServiceSMO {
+
+    private final static Logger logger = LoggerFactory.getLogger(RegisterServiceSMOImpl.class);
+
+
+    @Autowired
+    private RestTemplate restTemplate;
+    @Override
+    public ResponseEntity<String> doRegister(IPageData pd) {
+        ResponseEntity<String> responseEntity = null;
+
+        Assert.jsonObjectHaveKey(pd.getReqData(),"username","请求报文格式错误或未包含用户名信息");
+        Assert.jsonObjectHaveKey(pd.getReqData(),"passwd","请求报文格式错误或未包含密码信息");
+        Assert.jsonObjectHaveKey(pd.getReqData(),"repasswd","请求报文格式错误或未包含确认密码信息");
+        Assert.jsonObjectHaveKey(pd.getReqData(),"tel","请求报文格式错误或未包含手机信息信息");
+        JSONObject registerInfo = JSONObject.parseObject(pd.getReqData());
+
+        //校验密码
+        if(!registerInfo.getString("passwd").equals(registerInfo.getString("repasswd"))){
+            responseEntity = new ResponseEntity<String>("密码和确认密码不一致",HttpStatus.INTERNAL_SERVER_ERROR);
+            return responseEntity;
+        }
+
+        //调用 手机验证码
+        responseEntity = this.invokeComponent("validate-tel","validate",pd);
+        if(responseEntity.getStatusCode() != HttpStatus.OK){
+            return responseEntity;
+        }
+
+        registerInfo.put("passwd", AuthenticationFactory.passwdMd5(registerInfo.getString("passwd")));
+        responseEntity = this.callCenterService(restTemplate,pd,registerInfo.toJSONString(), ServiceConstant.SERVICE_API_URL+"/api/user.service.register", HttpMethod.POST);
+        return responseEntity;
+    }
+
+    /**
+     * 发送验证码
+     * @param pd
+     * @return
+     */
+    @Override
+    public ResponseEntity<String> sendTelMessageCode(IPageData pd) {
+
+        Assert.jsonObjectHaveKey(pd.getReqData(),"tel","请求报文格式错误或未包含手机号信息");
+        JSONObject telInfo = JSONObject.parseObject(pd.getReqData());
+
+        String verifyCode = AliSendMessageFactory.generateMessageCode();
+        ResponseEntity<String> sendMessageResult = null;
+        try {
+            //开始发送验证码
+            AliSendMessageFactory.sendMessage(telInfo.getString("tel"),verifyCode);
+
+            //将验证码存入Redis中
+            CommonCache.setValue(telInfo.getString("tel")+"_validateTel",verifyCode.toLowerCase(),CommonCache.defaultExpireTime);
+
+            sendMessageResult = new ResponseEntity<>("成功", HttpStatus.OK);
+
+        }catch (Exception e){
+            logger.error("生成验证码失败,",e);
+            sendMessageResult = new ResponseEntity<>("", HttpStatus.INTERNAL_SERVER_ERROR);
+        }
+        return sendMessageResult;
+
+    }
+}

+ 1 - 1
WebService/src/main/resources/components/login/login.js

@@ -16,7 +16,7 @@
                     console.log('errorInfoEvent 事件被监听',_errorInfo)
                 });
 
-             vc.component.$on('login_param_change_event',function(params){
+             vc.component.$on('validate_code_component_param_change_event',function(params){
                          for(var tmpAttr in params){
                              vc.component.loginInfo[tmpAttr] = params[tmpAttr];
                          }

+ 24 - 0
WebService/src/main/resources/components/register/register.html

@@ -0,0 +1,24 @@
+<div component="login">
+    <div>
+        <h1 class="logo-name">HC</h1>
+    </div>
+    <h3>请注册</h3>
+    <p style="color: red;">{{registerInfo.errorInfo}}</p>
+    <div class="m-t" role="form">
+        <div class="form-group">
+            <input type="text" v-model="registerInfo.username" class="form-control" placeholder="用户名" required=""/>
+        </div>
+        <div class="form-group">
+            <input type="password" v-model="registerInfo.passwd" class="form-control" placeholder="密码" required=""/>
+        </div>
+        <div class="form-group">
+            <input  name="repasswd" v-model="registerInfo.repasswd" type="password" class="form-control" placeholder="确认密码" required="">
+        </div>
+        <vc:create name="tel"></vc:create>
+        <button type="submit" v-on:click="onRegister()" class="btn btn-primary block full-width m-b">注册</button>
+
+        <p class="text-muted text-center"><small>已有账户?</small></p>
+        <a class="btn btn-sm btn-white btn-block" href="/users/login">登录</a>
+    </div>
+
+</div>

+ 55 - 0
WebService/src/main/resources/components/register/register.js

@@ -0,0 +1,55 @@
+(function(vc){
+      vc.extends({
+        data:{
+            registerInfo:{
+                username:'',
+                passwd:'',
+                repasswd:'',
+                errorInfo:''
+            }
+        },
+        _initMethod:function(){
+
+        },
+        _initEvent:function(){
+             vc.component.$on('errorInfoEvent',function(_errorInfo){
+                    vc.component.loginInfo.errorInfo = _errorInfo;
+                    console.log('errorInfoEvent 事件被监听',_errorInfo)
+                });
+
+             vc.component.$on('validate_code_component_param_change_event',function(params){
+                         for(var tmpAttr in params){
+                             vc.component.loginInfo[tmpAttr] = params[tmpAttr];
+                         }
+                         console.log('errorInfoEvent 事件被监听',params)
+                     });
+        },
+        methods:{
+            doRegister(){
+                vc.http.post(
+                            'register',
+                            'doRegister',
+                            JSON.stringify(vc.component.registerInfo),
+                            {
+                                emulateJSON:true
+                             },
+                             function(json,res){
+                                //vm.menus = vm.refreshMenuActive(JSON.parse(json),0);
+                                if(res.status == 200){
+                                    vc.jumpToPage("/");
+                                    return ;
+                                }
+                                vc.component.registerInfo.errorInfo = json;
+                             },
+                             function(errInfo,error){
+                                console.log('请求失败处理');
+
+                                vc.component.registerInfo.errorInfo = errInfo;
+                             });
+
+            }
+        }
+    });
+
+
+})(window.vc);

+ 3 - 1
WebService/src/main/resources/components/validate_code/validate-code.html

@@ -2,5 +2,7 @@
     <div class="col-sm-8 ">
         <input type="text" class="form-control" v-model="validateCode" placeholder="请输入验证码" required=""/>
     </div>
-    <img v-bind:src="codeImage" class="col-sm-4 form-control" v-on:click="generateCode()"/>
+    <div class="col-sm-4 ">
+        <img v-bind:src="codeImage" border="0" style="cursor:pointer" alt="点击刷新验证码" class="form-control no_padding" v-on:click="generateCode()"/>
+    </div>
 </div>

+ 1 - 1
WebService/src/main/resources/components/validate_code/validate-code.js

@@ -17,7 +17,7 @@
                     var validateParam = {
                         validateCode:vc.component.validateCode
                     };
-                    vc.component.$emit('login_param_change_event',validateParam);
+                    vc.component.$emit('validate_code_component_param_change_event',validateParam);
                 }
             },
             methods:{

+ 13 - 0
WebService/src/main/resources/components/validate-tel/validate-tel.html

@@ -0,0 +1,13 @@
+<div component="validate-tel">
+    <div class="form-group">
+        <input  name="tel" v-model="validateParam.tel" type="tel" class="form-control" placeholder="请输入手机号码" required="">
+    </div>
+    <div class="form-group row" >
+        <div class="col-sm-8 ">
+            <input type="text" class="form-control" v-model="validateParam.messageCode" placeholder="请输入验证码" required=""/>
+        </div>
+        <div class="col-sm-4 ">
+            <button type="button" class="btn btn-primary form-control" v-on:click="sendTelMessageCode()">{{buttonInfo}}</button>
+        </div>
+    </div>
+</div>

+ 53 - 0
WebService/src/main/resources/components/validate-tel/validate-tel.js

@@ -0,0 +1,53 @@
+(function(vc){
+    vc.extends({
+            data:{
+                validateParam:{
+                    tel:'',
+                    messageCode:'',
+                },
+               buttonInfo:'验证码'
+            },
+            _initMethod:function(){
+                console.log("validate-tel _initMethod 方法调用");
+                 //vc.component.generateCode();
+
+            },
+            _initEvent:function(){
+
+            },
+            watch: {
+                tel:function(){
+                    vc.component.$emit('validate_tel_component_param_change_event',vc.component.validateParam);
+                },
+                messageCode:function(){
+                    vc.component.$emit('validate_tel_component_param_change_event',vc.component.validateParam);
+                }
+            },
+            methods:{
+                sendTelMessageCode(){
+                    var param = {
+                        params:{
+                            _uId:'123'
+                        }
+                    };
+                    console.log("validate-tel sendTelMessageCode",param);
+                    vc.http.get('validate-tel','sendTelMessageCode',
+                                 param,
+                                 function(json,res){
+                                    //vm.menus = vm.refreshMenuActive(JSON.parse(json),0);
+                                    if(res.status == 200){
+                                        vc.component.errorInfo = json;
+                                        return ;
+                                    }
+                                    vc.component.$emit('errorInfoEvent',json);
+                                 },function(errInfo,error){
+                                    console.log('请求失败处理');
+                                    vc.component.errorInfo = errInfo;
+                                 });
+
+                }
+            }
+
+    });
+
+})(window.vc);

+ 6 - 0
WebService/src/main/resources/static/css/common.css

@@ -0,0 +1,6 @@
+.no_padding{
+    padding:0px 0px
+}
+.no_margin{
+    margin:0px 0px
+}

+ 28 - 0
WebService/src/main/resources/views/register.html

@@ -0,0 +1,28 @@
+
+<html lang="en"
+      xmlns="http://www.w3.org/1999/xhtml"
+      xmlns:th="http://www.thymeleaf.org"
+      xmlns:vc="http://www.thymeleaf.org">
+
+<head>
+
+    <meta charset="utf-8"/>
+    <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
+
+    <title>请注册 | java110</title>
+
+    <vc:create name="commonTop"></vc:create>
+
+</head>
+
+<body class="gray-bg">
+<div id="component" class="middle-box text-center loginscreen animated fadeInDown">
+    <vc:create name="login"></vc:create>
+
+</div>
+
+
+<vc:create name="commonBottom"></vc:create>
+</body>
+
+</html>

+ 5 - 0
java110-core/pom.xml

@@ -38,6 +38,11 @@
             <artifactId>java110-cacheAgent</artifactId>
         </dependency>
 
+        <dependency>
+            <groupId>com.aliyun</groupId>
+            <artifactId>aliyun-java-sdk-core</artifactId>
+        </dependency>
+
 
         <dependency>
             <groupId>junit</groupId>

+ 82 - 0
java110-core/src/main/java/com/java110/core/factory/AliSendMessageFactory.java

@@ -0,0 +1,82 @@
+package com.java110.core.factory;
+
+import com.aliyuncs.CommonRequest;
+import com.aliyuncs.CommonResponse;
+import com.aliyuncs.DefaultAcsClient;
+import com.aliyuncs.IAcsClient;
+import com.aliyuncs.exceptions.ClientException;
+import com.aliyuncs.exceptions.ServerException;
+import com.aliyuncs.http.MethodType;
+import com.aliyuncs.profile.DefaultProfile;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.util.Random;
+/*
+pom.xml
+<dependency>
+  <groupId>com.aliyun</groupId>
+  <artifactId>aliyun-java-sdk-core</artifactId>
+  <version>4.0.3</version>
+</dependency>
+*/
+/**
+ * Created by wuxw on 2019/3/23.
+ */
+public class AliSendMessageFactory {
+
+
+    private final static Logger logger = LoggerFactory.getLogger(AliSendMessageFactory.class);
+
+
+    public final static int DEFAULT_MESSAGE_CODE_LENGTH = 6;
+
+
+    /**
+     * 生成6位短信码
+     * @return
+     */
+    public static String generateMessageCode(){
+        return generateMessageCode(DEFAULT_MESSAGE_CODE_LENGTH);
+    }
+
+    /**
+     * 生成验证码
+     * @param limit 位数
+     * @return
+     */
+    public static String generateMessageCode(int limit){
+        Random random = new Random();
+        String result="";
+        for (int i=0;i<limit;i++)
+        {
+            result+=random.nextInt(10);
+        }
+        return result;
+    }
+
+    public static void sendMessage(String tel,String code) {
+
+        //开始发送验证码
+        logger.debug("发送号码为{},短信码为{}",tel,code);
+        DefaultProfile profile = DefaultProfile.getProfile("cn-hangzhou", "<accessKeyId>", "<accessSecret>");
+        IAcsClient client = new DefaultAcsClient(profile);
+
+        CommonRequest request = new CommonRequest();
+        //request.setProtocol(ProtocolType.HTTPS);
+        request.setMethod(MethodType.POST);
+        request.setDomain("dysmsapi.aliyuncs.com");
+        request.setVersion("2017-05-25");
+        request.setAction("SendSms");
+        request.putQueryParameter("RegionId", "cn-hangzhou");
+        request.putQueryParameter("PhoneNumbers", tel);
+        try {
+            CommonResponse response = client.getCommonResponse(request);
+            System.out.println(response.getData());
+        } catch (ServerException e) {
+            e.printStackTrace();
+        } catch (ClientException e) {
+            e.printStackTrace();
+        }
+    }
+}

+ 6 - 0
pom.xml

@@ -390,6 +390,12 @@
                 <version>1.9.22</version>
             </dependency>
 
+            <dependency>
+                <groupId>com.aliyun</groupId>
+                <artifactId>aliyun-java-sdk-core</artifactId>
+                <version>4.0.3</version>
+            </dependency>
+
         </dependencies>
 
     </dependencyManagement>