Java案例-用户注册邮箱绑定激活功能实现
<–start–>
需求描述:當客戶打開收到郵箱激活碼的郵件,點擊激活鏈接,正確填寫激活碼后就會完成郵箱激活的步驟。
在后臺編程代碼編寫中,有以下幾個要點:
① 接收客戶的手機號碼和郵箱激活碼。
② 先判斷激活碼是否有效。如果激活碼無效,提示用戶。
③ 如果激活碼有效,接下來就要判斷用戶是否在重復綁定郵箱,customer表中
的type字段就是用來甄別郵箱是否已經激活,默認該字段的值是空值,如果type字段的值為1表示用戶已經綁定郵箱。
④ 如果用戶沒有綁定過郵箱,就完成郵箱的綁定。
編寫CustomerAction類,提供activeMail方法:
① 使用屬性驅動接收激活碼。
② 判斷激活碼是否有效。因為先前已經將郵箱激活碼存入了redis中,所以我們
可以直接從redis中獲取激活碼,判斷用戶提交的激活碼是否為空或者與redis中存儲的不同,這兩種情況均表示激活碼無效。
③ 解決響應到客戶端的中文亂碼的問題。
④ 激活碼有效的話,為了避免用戶重復點擊激活地址導致重復綁定情形發生,
就需要通過webservice查詢crm系統中的客戶信息,判斷是否已經綁定。
⑤ 對于已經激活郵箱的用戶,在redis中刪除郵箱激活碼。
完整的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–>
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的Java案例-用户注册邮箱绑定激活功能实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java案例-用户注册邮箱验证将邮箱激活
- 下一篇: SSH框架整合实现Java三层架构实例(