1. 程式人生 > >Java之品優購課程講義_day14(7)

Java之品優購課程講義_day14(7)

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