1. 程式人生 > >第一個SSM前端專案(八):賬號登陸與手機快捷登入

第一個SSM前端專案(八):賬號登陸與手機快捷登入

一、登入頁面

二、賬號登入流程

 1)賬號登入程式碼如下

package cn.com.gulu.controller;

import javax.servlet.http.HttpServletRequest;

import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

import cn.com.gulu.entity.User;
import cn.com.gulu.service.UserService;
import cn.com.gulu.util.ConstUtil;
import cn.com.gulu.util.Md5Util;


/**
 * 登入管理類
 * @author Administrator
 *
 */
@Controller
@RequestMapping(value="/login")
public class LoginController
{
    
    @Autowired
    private UserService userService;
    
    

    /**
     * 進行登入
     */
   @RequestMapping(value="/login")
   public String login(Model model,String username,String password,String code,HttpServletRequest request)
   {
       //校驗驗證碼
       if(StringUtils.isBlank(code))
       {
           model.addAttribute("error", "codeFail");
           return "../../login";     
       }
       
       Object attribute = request.getSession().getAttribute(ConstUtil.VALIDATIONCODE);
       
       if(attribute==null)
       {
           model.addAttribute("error", "codeFail"); 
           return "../../login";  
       }else if(!code.equalsIgnoreCase(attribute.toString()))
       {
           model.addAttribute("error", "codeFail"); 
           return "../../login"; 
       }
       
       User user=userService.findByEmail(username);
       
       String passwordInput=Md5Util.encodeString(password+ConstUtil.ENCODE);
       
       if(user==null)
       {
           model.addAttribute("error", "fail"); 
           return "../../login"; 
           
       }else if(!user.isIs_active())
       {
           model.addAttribute("error", "active"); 
           return "../../login"; 
           
       }else if(!passwordInput.equals(user.getPassword()))
       {
           model.addAttribute("error", "fail"); 
           return "../../login"; 
           
       }else
       {
           model.addAttribute("user", user);
           
           
           //存入session
           request.getSession().setAttribute(ConstUtil.CURENTUSER, user);
           
           //重定向到個人主頁
           return "redirect:personal/list";
           
       }
       
       
       
   }
    
    
}

三、手機快捷登入流程如下

 1)手機快捷登入使用的是騰訊雲簡訊服務,因此需要去騰訊雲開通簡訊服務,拿到對應的APPID和APPKEY、模板編號等

 2)pom檔案引入騰訊雲簡訊相關依賴

		
		<!--騰訊雲簡訊相關依賴 -->
		<dependency>
			<groupId>com.github.qcloudsms</groupId>
			<artifactId>qcloudsms</artifactId>
			<version>1.0.5</version>
		</dependency>
		

3) 設計騰訊雲簡訊傳送工具類,根據騰訊雲返回的結果狀態碼給予不同的提示

package cn.com.gulu.util;



import com.github.qcloudsms.SmsSingleSender;
import com.github.qcloudsms.SmsSingleSenderResult;

/**
 * 騰訊雲相關工具類
 * @author Administrator
 *
 */
public class TengXunYunUtil
{

    
    /**
     * 傳送簡訊
     */
    public static int SendDuanXin(String phone,String code)
    {
        int  templateId=215311; //簡訊正文模板id(在騰訊雲簡訊控制檯上設定)
        
        String[] params={code}; //引數個數需與模板的變數個數一致
        
        String smsSign="咕嚕小窩"; //簽名引數,使用的是簽名內容而非簽名id--需跟控制檯一致
        
        //傳送簡訊
        SmsSingleSender sender=new SmsSingleSender(ConstUtil.TENGXUNYUN_DUANXIN_APPID,ConstUtil.TENGXUNYUN_DUANXIN_APPKEY);
     
        SmsSingleSenderResult result=sender.sendWithParam("86", phone, templateId, params, smsSign, "", "");
        
        //返回結果碼
        return result.result;
        
        
    }

}


4)根據jsp頁面的方法在後臺設定傳送簡訊方法

    //獲取驗證碼
    $(function () {
        var go = document.getElementById('go');

        go.onclick = function (ev){
            if(!flag2){
                $("#phone_span").text("手機號碼非法或者未註冊!").css("color","red");
            }else {
                //  傳送簡訊給使用者手機..
                // 1 傳送一個HTTP請求,通知伺服器 傳送簡訊給目標使用者
                var telephone =$("input[name='telephone']").val();// 使用者輸入的手機號
                    // 使用者輸入手機號校驗通過
                    $("#go").attr("disabled", "");
                    countDown(60);

                    $.ajax({
                        method: 'POST',
                        url: '<%=basePath%>login/sendSms',
                        data : {
                            telephone : telephone
                        },
                        success:function(data) {
                            var tt = data["msg"];
                            if(tt){
                                new $.zui.Messager('簡訊傳送成功!', {
                                    type: 'success',
                                    icon:'ok-sign',
                                    actions: [{
                                        name: 'close',
                                        icon: 'remove'
                                    }]
                                }).show();

                            }else{
                                var msg=data["msgContent"]
                                new $.zui.Messager(msg, {
                                    type: 'danger',
                                    icon:'fail',
                                    actions: [{
                                        name: 'close',
                                        icon: 'remove'
                                    }]
                                }).show();
                            }
                        }
                    });
                }


            var oEvent = ev || event;
            //js阻止連結預設行為,沒有停止冒泡
            oEvent.preventDefault();
            return false;

        }
    });

5)傳送簡訊方法如下

 /**
     * 傳送手機簡訊
     */
    @RequestMapping(value="/sendSms")
    @ResponseBody
    public Object sendSms(String telephone)
    {
        Map<String, Object> map = new HashMap<String, Object>();

        map.put("msg",false);
        
        String code=UuidUtil.get6Uuid();
        
        //把簡訊驗證碼存入redis,3分鐘有效
        redisTemplate.opsForValue().set(telephone, code, 3, TimeUnit.MINUTES);
        
        //呼叫簡訊工具類傳送簡訊
        try
        {
            int result=TengXunYunUtil.SendDuanXin(telephone, code);
            
            if(result==0)
            {
                map.put("msg", true);  
            }else if(result==1025)
            {
                map.put("msgContent", "單日該手機下發簡訊達到上限數量10條,無法傳送");  
                
            }else if(result==1024)
            {
                map.put("msgContent", "該手機小時內下發簡訊達到上限數量5條,無法傳送");  
            }
            
        }
        catch (Exception e)
        {
       
            e.printStackTrace();
        }
        
        return map;
        
    }

6)修改後臺登入方法修改如下:

/**
     * 進行登入
     */
    @RequestMapping(value = "/login")
    public String login(Model model, String username, String password,
            String code, String telephone, String phone_code,
            HttpServletRequest request)
    {
        // 手機號不為空代表手機快捷登入
        if (!StringUtils.isBlank(telephone))
        {
            String redisCode=redisTemplate.opsForValue().get(telephone);
            
            if(phone_code.equals(redisCode))
            {
                User curentUser = userService.findByPhone(telephone);
                
                model.addAttribute("user", curentUser);
                
                request.getSession().setAttribute(ConstUtil.CURENTUSER, curentUser);
                
                // 重定向到個人主頁
                return "redirect:personal/list";
            }else 
            {
                model.addAttribute("error", "phone_fail");
                return "../../login";
                
            }
        }
        else
        {

            // 校驗驗證碼
            if (StringUtils.isBlank(code))
            {
                model.addAttribute("error", "codeFail");
                return "../../login";
            }

            Object attribute = request.getSession().getAttribute(
                    ConstUtil.VALIDATIONCODE);

            if (attribute == null)
            {
                model.addAttribute("error", "codeFail");
                return "../../login";
            }
            else if (!code.equalsIgnoreCase(attribute.toString()))
            {
                model.addAttribute("error", "codeFail");
                return "../../login";
            }

            User user = userService.findByEmail(username);

            String passwordInput = Md5Util.encodeString(password
                    + ConstUtil.ENCODE);

            if (user == null)
            {
                model.addAttribute("error", "fail");
                return "../../login";

            }
            else if (!user.isIs_active())
            {
                model.addAttribute("error", "active");
                return "../../login";

            }
            else if (!passwordInput.equals(user.getPassword()))
            {
                model.addAttribute("error", "fail");
                return "../../login";

            }
            else
            {
                model.addAttribute("user", user);

                // 存入session
                request.getSession().setAttribute(ConstUtil.CURENTUSER, user);

                // 重定向到個人主頁
                return "redirect:personal/list";

            }

        }
    }
    

7)測試賬號登入和手機快捷登入(重點是手機快捷登入)

.