前端发送更改密码请求,头部携带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; }
以上就是三个注解的用法,在后面写的请求中,基本都是以这种形式来判断是否放行用户的操作。