Java之品優購課程講義_day14(7)
阿新 • • 發佈:2018-11-11
4.3.1 使用者註冊判斷驗證碼
(1)修改 pinyougou-user-interface 的 UserService.java /** *判斷簡訊驗證碼是否存在 *@param phone *@return */ public boolean checkSmsCode(String phone,String code); (2)修改 pinyougou-user-service 的 UserServiceImpl.java /** * 判斷驗證碼是否正確 */ public boolean checkSmsCode(String phone,String code){ //得到快取中儲存的驗證碼 String sysCode = (String) redisTemplate.boundHashOps("smscode").get(phone); if(sysCode==null){ return false; } if(!sysCode.equals(code)){ return false; } return true; } (3)修改 pinyougou-user-web 的 UserController.java /** *增加 *@param user *@return */ @RequestMapping("/add") public Result add(@RequestBody TbUser user,String smscode){ boolean checkSmsCode = userService.checkSmsCode(user.getPhone(), smscode); if(checkSmsCode==false){ return new Result(false, "驗證碼輸入錯誤!"); } try { userService.add(user); return new Result(true, "增加成功"); } catch (Exception e) { e.printStackTrace(); return new Result(false, "增加失敗"); } } (4)修改 pinyougou-user-web 的 userService.js //增加 this.add=function(entity,smscode){ return $http.post('../user/add.do?smscode='+smscode ,entity ); } (5)修改 pinyougou-portal-web 的 UserController.java //儲存 $scope.reg=function(){ userService.add( $scope.entity, $scope.smscode ).success( function(response){ alert(response.message); } ); } (6)修改頁面,繫結變數 <input type="text" placeholder="簡訊驗證碼" ng-model="smscode" class="input-xfat input-xlarge"> <a href="#" ng-click="sendCode()">獲取簡訊驗證碼</a> 4.3.1 簡訊驗證碼傳送到手機 (1)在 pinyougou-user-service 新增配置檔案 applicationContext-activemq.xml <!-- 真正可以產生 Connection 的 ConnectionFactory,由對應的 JMS 服務廠商提供--> <bean id="targetConnectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory"> <property name="brokerURL" value="tcp://192.168.25.135:61616"/> </bean> <!-- Spring 用於管理真正的 ConnectionFactory 的 ConnectionFactory --> <bean id="connectionFactory" class="org.springframework.jms.connection.SingleConnectionFactory"> <!-- 目標 ConnectionFactory 對應真實的可以產生 JMS Connection 的 ConnectionFactory --> <property name="targetConnectionFactory" ref="targetConnectionFactory"/> </bean> <!-- Spring 提供的 JMS 工具類,它可以進行訊息傳送、接收等 --> <bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate"> <!-- 這個 connectionFactory 對應的是我們定義的 Spring 提供的那個 ConnectionFactory 物件 --> <property name="connectionFactory" ref="connectionFactory"/> </bean> <!--這個是點對點訊息 --> <bean id="smsDestination" class="org.apache.activemq.command.ActiveMQQueue"> <constructor-arg value="sms"/> </bean> @Autowired private JmsTemplate jmsTemplate; @Autowired private Destination smsDestination; @Value("${template_code}") private String template_code; @Value("${sign_name}") private String sign_name; /** * 生成簡訊驗證碼 */ public void createSmsCode(final String phone){ //生成 6 位隨機數 final String code = (long) (Math.random()*1000000)+""; System.out.println("驗證碼:"+code); //存入快取redisTemplate.boundHashOps("smscode").put(phone, code); //傳送到 activeMQ jmsTemplate.send(smsDestination, new MessageCreator() { @Override public Message createMessage(Session session) throws JMSException { MapMessage mapMessage = session.createMapMessage(); mapMessage.setString("mobile", phone);//手機號 mapMessage.setString("template_code", "SMS_85735065");//模板編號 mapMessage.setString("sign_name", "黑馬");//簽名 Map m=new HashMap<>(); m.put("number", code); mapMessage.setString("param", JSON.toJSONString(m));//引數 return mapMessage; } }); } (3)在 pinyougou-common 的 properties 目錄下建立配置檔案 sms.properties template_code=SMS_85735065 sign_name=\u9ED1\u9A6C