zoukankan      html  css  js  c++  java
  • 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;
        }

    以上就是三个注解的用法,在后面写的请求中,基本都是以这种形式来判断是否放行用户的操作。

  • 相关阅读:
    Windows Phone App的dump 文件分析
    博客园客户端UAP开发随笔 -- App的心动杀手锏:动画
    博客园客户端UAP开发随笔--自定义控件的左膀右臂
    新年快乐
    博客园客户端(Universal App)开发随笔
    博客园 UAP 的部分反馈回复
    博客园客户端(Universal App)开发随笔 -- 样式管理与夜间模式
    Hadoop专业解决方案-第5章 开发可靠的MapReduce应用
    胖子哥的大数据之路(6)- NoSQL生态圈全景介绍
    NoSQL高级培训课程-HBase&&MongoDB(两天版)
  • 原文地址:https://www.cnblogs.com/liao123/p/10529013.html
Copyright © 2011-2022 走看看