<–start–> 
需求描述:当客户打开收到邮箱激活码的邮件,点击激活链接,正确填写激活码后就会完成邮箱激活的步骤。 
在后台编程代码编写中,有以下几个要点: 
① 接收客户的手机号码和邮箱激活码。 
② 先判断激活码是否有效。如果激活码无效,提示用户。 
③ 如果激活码有效,接下来就要判断用户是否在重复绑定邮箱,customer表中 
的type字段就是用来甄别邮箱是否已经激活,默认该字段的值是空值,如果type字段的值为1表示用户已经绑定邮箱。 
④ 如果用户没有绑定过邮箱,就完成邮箱的绑定。 
编写CustomerAction类,提供activeMail方法: 
① 使用属性驱动接收激活码。

// 属性驱动
private String activecode;
public void setActivecode(String activecode) {
this.activecode = activecode;
}

② 判断激活码是否有效。因为先前已经将邮箱激活码存入了redis中,所以我们 
可以直接从redis中获取激活码,判断用户提交的激活码是否为空或者与redis中存储的不同,这两种情况均表示激活码无效。 
③ 解决响应到客户端的中文乱码的问题。

ServletActionContext.getResponse().setContentType("text/html;charset=utf-8");

④ 激活码有效的话,为了避免用户重复点击激活地址导致重复绑定情形发生, 
就需要通过webservice查询crm系统中的客户信息,判断是否已经绑定。 
⑤ 对于已经激活邮箱的用户,在redis中删除邮箱激活码。

// 删除redis的激活码
redisTemplate.delete(model.getTelephone());

完整的CustomerAction代码:

@Action("customer_activeMail")
public String activeMail() throws IOException {
ServletActionContext.getResponse().setContentType(
"text/html;charset=utf-8");
// 判断激活码是否有效
String activecodeRedis = redisTemplate.opsForValue().get(
model.getTelephone());
if (activecodeRedis == null || !activecodeRedis.equals(activecodeRedis)) {
// 激活码无效
ServletActionContext.getResponse().getWriter()
.println("激活码无效,请登录系统,重新绑定邮箱!");
} else {
// 激活码有效
// 防止重复绑定
// 调用CRM webService 查询客户信息,判断是否已经绑定
Customer customer = WebClient
.create("http://localhost:9002/crm_management/services"
+ "/customerService/customer/telephone/"
+ model.getTelephone())
.accept(MediaType.APPLICATION_JSON).get(Customer.class);
if (customer.getType() == null || customer.getType() != 1) {
// 没有绑定,进行绑定
WebClient.create(
"http://localhost:9002/crm_management/services"
+ "/customerService/customer/updatetype/"
+ model.getTelephone()).get();
ServletActionContext.getResponse().getWriter()
.println("邮箱绑定成功!");
} else {
// 已经绑定过
ServletActionContext.getResponse().getWriter()
.println("邮箱已经绑定过,无需重复绑定!");
} // 删除redis的激活码
redisTemplate.delete(model.getTelephone());
}
return NONE;
}

在crm_management系统中,编写webservice服务接口findByTelephone,通过手机号码来查询客户信息。

@Path("/customer/telephone/{telephone}")
@GET
@Consumes({ "application/xml", "application/json" })
public Customer findByTelephone(@PathParam("telephone") String telephone);

编写updateType服务接口,当激活码有效时,就修改customer表中的type字段的值为1。

@Path("/customer/updatetype/{telephone}")
@GET
public void updateType(@PathParam("telephone") String telephone);

在实现类CustomerServiceImpl中实现findByTelephone和updateType这两个方法。

@Override
public Customer findByTelephone(String telephone) {
return customerRepository.findByTelephone(telephone);
} @Override
public void updateType(String telephone) {
customerRepository.updateType(telephone);
}

在CustomerRepository的dao中编写方法,运用spring data jpa完成持久层的操作。

public Customer findByTelephone(String telephone);

@Query("update Customer set type=1 where telephone= ?")
@Modifying
public void updateType(String telephone);

完整的CustomerService服务接口代码:

public interface CustomerService {

@Path("/customer/telephone/{telephone}")
@GET
@Consumes({ "application/xml", "application/json" })
public Customer findByTelephone(@PathParam("telephone") String telephone); @Path("/customer/updatetype/{telephone}")
@GET
public void updateType(@PathParam("telephone") String telephone); }

完整的CustomerServiceImpl实现类代码:

@Service
@Transactional
public class CustomerServiceImpl implements CustomerService { // 注入DAO
@Autowired
private CustomerRepository customerRepository; @Override
public Customer findByTelephone(String telephone) {
return customerRepository.findByTelephone(telephone);
} @Override
public void updateType(String telephone) {
customerRepository.updateType(telephone);
} }

完整的CustomerRepository持久层代码:

public interface CustomerRepository extends JpaRepository<Customer, Integer> {

public Customer findByTelephone(String telephone);

@Query("update Customer set type=1 where telephone= ?")
@Modifying
public void updateType(String telephone); }

<–end–>

Java案例-用户注册邮箱绑定激活功能实现的更多相关文章

  1. JAVA 实现 QQ 邮箱发送验证码功能(不局限于框架)

    JAVA 实现 QQ 邮箱发送验证码功能(不局限于框架) 本来想实现 QQ 登录,有域名一直没用过,还得备案,好麻烦,只能过几天再更新啦. 先把实现的发送邮箱验证码更能更新了. 老规矩,更多内容在注释 ...

  2. PHP用户注册邮箱验证激活帐号

    我们在很多网站注册会员时,注册完成后,系统会自动向用户的邮箱发送一封邮件,这封邮件的内容就是一个URL链接,用户需要点击打开这个链接才能激活之前在该网站注册的帐号.激活成功后才能正常使用会员功能. 本 ...

  3. ThinkPHP 3.2 用户注册邮箱验证激活帐号

    本文将结合实例,讲解如何使用PHP+Mysql完成注册帐号.发送激活邮件.验证激活帐号.处理URL链接过期的功能. 业务流程 1.用户提交注册信息. 2.写入数据库,此时帐号状态未激活. 3.将用户名 ...

  4. PHP用户注册邮箱并验证激活帐号

    我们在很多网站注册会员时,注册完成后,系统会自动向用户的邮箱发送一封邮件,这封邮件的内容就是一个URL链接,用户需要点击打开这个链接才能激活之前在该网站注册的帐号.激活成功后才能正常使用会员功能. 查 ...

  5. java实现邮箱验证的功能

    在日常生活中,我们在一个网站中注册一个账户时,往往在提交个人信息后,网站还要我们通过手机或邮件来验证,邮件的话大概会是下面这个样子的: 用户通过点击链接从而完成注册,然后才能登录. 也许你会想,为什么 ...

  6. .NET下用C#实现邮箱激活功能

    最近要用到安全邮箱激活的功能,故写篇博客记录下. 思路:在表中增加一个字段State来记录邮箱是否激活(0激活,1未激活.) 1.发送邮件.     1-1,给邮箱发送邮件.内容:激活地址+GUID. ...

  7. php实现邮箱激活功能

    php实现邮箱激活功能 一.样例 二.文件结构 其中swiftmailer-master是第三方插件,用来发验证邮件 三.核心代码 doAction.php 响应页面 <?php header( ...

  8. 075 01 Android 零基础入门 01 Java基础语法 09 综合案例-数组移位 07 综合案例-数组移位-主方法功能4的实现

    075 01 Android 零基础入门 01 Java基础语法 09 综合案例-数组移位 07 综合案例-数组移位-主方法功能4的实现 本文知识点:综合案例-数组移位-主方法功能4的实现 说明:因为 ...

  9. 074 01 Android 零基础入门 01 Java基础语法 09 综合案例-数组移位 06 综合案例-数组移位-主方法功能3的实现

    074 01 Android 零基础入门 01 Java基础语法 09 综合案例-数组移位 06 综合案例-数组移位-主方法功能3的实现 本文知识点:综合案例-数组移位-主方法功能3的实现 说明:因为 ...

随机推荐

  1. vue-引入外部js文件的方法和常量

    1.方法调用 a:  js文件(static/js/public.js) //函数的定义 返回上一页 export function goback(laststep) { laststep } b: ...

  2. C#异步编程のParallel(并行)

    Parallel是循环中开启多线程 Stopwatch watch1 = new Stopwatch(); watch1.Start(); for (int i = 1; i <= 10; i+ ...

  3. 虚拟化技术QEMU-KVM入门

    一.QEMU.KVM.QEMU-KVM QEMU提供一系列的硬件模拟设备(CPU,网卡,磁盘等),客户机指令都需要QEMU翻译,因而性能较差.KVM是linux内核提供的虚拟化,可以用来进行vCPU的 ...

  4. IPS简单使用方法

    转载:http://blog.csdn.net/zhou1862324/article/details/17512191 IPS(incident packaging service)是11G的新特性 ...

  5. bsxfun, arrayfun, cellfun, spfun, structfun

    在使用matlab进行矩阵计算的时候,经常会遇到要使用for循环的情况.但其实很多操作可以用内部的一些函数代替.今天总结一些几个函数的用法: bsxfun, arrayfun, cellfun, sp ...

  6. Java IO(四)——字符流

    一.字符流 字节流提供了处理任何类型输入/输出操作的功能(因为对于计算机而言,一切都是0和1,只需把数据以字节形式表示就够了),但它们不可以直接操作Unicode字符,因为一个Unicode字符占用2 ...

  7. JavaEE学习之JAXB

    一.前言 JAXB——Java Architecture for XML Binding,是一项可以根据XML Schema产生Java类的技术.JAXB提供将XML实例文档反向生成Java对象树的方 ...

  8. 使用sklearn做文本特征提取

    提取文本的特征,把文本用特征表示出来,是文本分类的前提,使用sklearn做文本的特征提取,需要导入TfidfVectorizer模块. from sklearn.feature_extraction ...

  9. python面向对象(封装、继承、多态)+ 面向对象小栗子

    大家好,下面我说一下我对面向对象的理解,不会讲的很详细,因为有很多人的博客都把他写的很详细了,所以,我尽可能简单的通过一些代码让初学者可以理解面向对象及他的三个要素. 摘要:1.首先介绍一下面向对象 ...

  10. 五子棋(无AI winform gdi+)

    之前无意间在博客园看到一篇用深度学习玩马里奥的文章,于是就想做这个小东西来测试人工智能算法(准备用PYTHON的库,对神经网络的梦已经做了好多年了,但是太难了,一直懒得动它),本来是想用WPF做UI, ...