6、获取登录后用户信息接口开发,忘记密码,提示问题与答案,重置密码功能开发

1、登录后获取用户信息接口开发

controller层:

//登录后获取用户信息
@RequestMapping(value = "get_user_info.do",method = RequestMethod.POST)
@ResponseBody
public  ServerResponse<User> getUserInfo(HttpSession session){
    User user= (User) session.getAttribute(Const.CURRENT_USER);

    if(user!=null){
        return ServerResponse.createBySuccess(user);
    }
    return ServerResponse.createByErrorMessage("用户为未登录,无法获取登录信息");

}

通过session获取当前用户

由于只直接返user对象,所以没有对server层进行操作
接口测试:

这里写图片描述

这里写图片描述

2、忘记密码接口开发

controller层:

//忘记密码
@RequestMapping(value = "forget_get_question.do",method = RequestMethod.POST)
@ResponseBody
public ServerResponse<String> forgetGetQuestion(String username){
        return iUserService.selectQuestion(username);
}

server层:

//查询问题
ServerResponse selectQuestion(String username);

serverImpl 层:

//忘记密码
public  ServerResponse selectQuestion(String username){
    ServerResponse validResponse=this.checkValid(username,Const.USERNAME);

    if(validResponse.isSuccess()){
        //用户不存在
        return ServerResponse.createByErrorMessage("用户不存在");

    }
    String question =userMapper.selectQuestionByUsername(username);

    if(StringUtils.isNotBlank(question)){
        return ServerResponse.createBySuccess(question);
    }
        return ServerResponse.createByErrorMessage("找回密码门的问题是空");

}

先在UserMapper中将接口写好:

String selectQuestionByUsername(String username);

对应mapper.xmlSQL语句:

<!--找回密码-->
<select id="selectQuestionByUsername" resultType="string" parameterType="string">
select
question
from mmall_user
where username=#{username}
</select>

接口测试

这里写图片描述

3、提示问题和答案(是在用户登录的前提下)接口开发

controller层:

//提交问题答案
@RequestMapping(value = "forget_check_answer.do",method = RequestMethod.POST)
@ResponseBody
public ServerResponse<String> forgetCheckAnswer(String username,String question,String answer){

    return iUserService.CheckAnswer(username,question,answer);
}

Server:

//校验问题的回答
ServerResponse<String> CheckAnswer(String username,String question,String answer);

serverImpl:

//校验回答是否正确
    public ServerResponse<String> CheckAnswer(String username,String question,String answer){
        int resultCount=userMapper.checkAnwser(username,question,answer);

        if(resultCount>0){
            //说明问题及问题答案是这个用户的,并且回答正确

            String forgetToken= UUID.randomUUID().toString();

            TokenCache.setKey(TokenCache.TOKEN_PREFIX+username,forgetToken);

            return ServerResponse.createBySuccess(forgetToken);

        }
        //说明问题是这个用户,但是回答错误
        return  ServerResponse.createByErrorMessage("回答错误");
    }

校验答案UserMapper:

int checkAnwser(@Param("username") String username, @Param("question") String question, @Param("answer") String answer);

对应功能的UserMapper.xml:

<!--提交问题答案-->
<select id="checkAnwser" resultType="int" parameterType="map">
select
count(1)
from
mmall_user
where username=#{username}
and question=#{question}
and answer=#{answer}
</select>

接口测试:

这里写图片描述

4、重置密码接口开发:

controller:

//登录状态的重置密码
@RequestMapping(value = "rest_password.do",method = RequestMethod.POST)
@ResponseBody
public ServerResponse<String> restPassword(HttpSession session, String passwordOld,String passwordNew){
    User user= (User) session.getAttribute(Const.CURRENT_USER);
    if(user==null){
        return  ServerResponse.createByErrorMessage("用户未登录");
    }
    //return  ServerResponse.createByErrorMessage("用户已登陆");
    return  iUserService.resetPassword(passwordOld,passwordNew,user);
}

server:

//登录状态下重置密码
ServerResponse<String> resetPassword(String passwordOld,String passwordNew,User user);

serverImpl:

//登录状态下的密码重置
    public ServerResponse<String> resetPassword(String passwordOld,String passwordNew,User user) {
        //防止横向越权,要校验一下这个用户的旧密码,一定要指向这个用户。因为我们会查询一个count(1),如果不指定id,那么结果可能就是true  count>0
        int resultCount = userMapper.checkPassword(MD5Util.MD5EncodeUtf8(passwordOld), user.getId());
        if (resultCount == 0) {
            return ServerResponse.createByErrorMessage("旧密码错误,修改失败");
        }
        user.setPassword(MD5Util.MD5EncodeUtf8(passwordNew));

        int updateCount = userMapper.updateByPrimaryKeySelective(user);

        if (updateCount > 0) {
            return ServerResponse.createBySuccessMessage("修改成功");
        }
        return ServerResponse.createByErrorMessage("密码更新失败");
    }

这里写图片描述

对应UserMapper

int updateByPrimaryKeySelective(User record);

调用的是逆向工程生产的方法,故而不用自己写xml中的SQL
接口测试:
这里写图片描述

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值