springboot 前后端分離開發 從零到整(四、更改密碼操作)


前端發送更改密碼請求,頭部攜帶token,服務端攔截器攔截頭部token並解析,根據token中的信息來查詢用戶信息。需要登錄才能進行的操作是由自己定的,有些操作可以直接放行。具體實現是:

上一章寫到有三個注解,其中passtoken是直接放行,不需要驗證即可進行的操作,userloginToken是需要token驗證並通過才能進行的操作,CurrentUserConstants將token轉化成CurrentUser。

下面就用簡單的更改密碼過程來運用一下UserLoginToken注解。

具體操作過程:

dao層

/**
     * 更改密碼
     * @param email
     * @param newPassword
     */
    @Update("update user set password=#{newPassword} where email=#{email}")
    public void ChangePassword(String email,String newPassword);

service層

/**
     * 根據舊密碼更改密碼
     * @param usedPassword
     * @return
     */
    public RespEntity ChangePassword(String email,String usedPassword,String newPassword){
        user=userDao.login(email,usedPassword);
        if(user==null){
            respEntity=new RespEntity(RespCode.PASSWORD_FAILED);
        }else {
            userDao.ChangePassword(email,newPassword);
            respEntity=new RespEntity(RespCode.SUCCESS);
        }
        return respEntity;
    }

controller層

/**
     * 更改密碼
     * @param user
     * @param map
     * @return
     */
    @UserLoginToken
    @RequestMapping("/changePassword")
    public RespEntity OperationPassword(@CurrentUser User user,@RequestBody Map<String,Object> map){
        String email=user.getEmail();
        String newPassword=(String)map.get("newPassword");
        String usedPassword=(String)map.get("usedPassword");
        respEntity=userService.ChangePassword(email,usedPassword,newPassword);
        return respEntity;
    }

在請求之前加入注解@UserLoginToken,聲明該請求需要攜帶token才能進行的操作,@CurrentUser 獲取發起請求的用戶信息。

前端ajax請求在頭部(header)攜帶token請求:

function changePassword(usedPassword,newPassword){
    $.ajax({
        async:false,
        url:tdoorurl+"changePassword",
        type:"POST",
        contentType:"application/json",
        dataType:"json",
        data:JSON.stringify({
            newPassword:newPassword,
            usedPassword:usedPassword
        }),
        headers:{
        //token保存在客戶端的localstorage中,從localstorage中取出
"Authorization":localStorage.getItem("token") }, success:function(Msg){ if(Msg.code==0){ console.log("修改密碼成功"); }else{ console.log("原密碼錯誤"); } }, error:function(Msg){ } }) }

相反,如果用戶在執行不需要登錄就放行的操作,在請求之前加上注解@PassToken。例如之前的登錄操作:

@PassToken
    @RequestMapping("/login")
    public RespEntity testData(@RequestBody Map<String,Object> map){
        String email=(String)map.get("email");
        String password=(String)map.get("password");
        respEntity=userService.Login(email,password);
        return respEntity;
    }

以上就是三個注解的用法,在后面寫的請求中,基本都是以這種形式來判斷是否放行用戶的操作。

 


免責聲明!

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



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