前端發送更改密碼請求,頭部攜帶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; }
以上就是三個注解的用法,在后面寫的請求中,基本都是以這種形式來判斷是否放行用戶的操作。