Java案例-用戶注冊郵箱綁定激活功能實現


<–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–>


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM