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 rel="nofollow"  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