Token + Cookie 登录验证

一、完整流程

1.登录:通过用户名和密码发送请求。
2.服务器端程序验证用户身份的合法性,若用户存在,服务器端程序则返回一个带签名的token。
3.客户端将token储存到cookie中,并且每次访问API都携带Token到服务端。
4.服务端验证token,校验成功则返回请求数据,校验失败则返回错误码。

在这里插入图片描述

二、具体实现

1、用户首次发起登录请求,携带用户名和密码
2、服务端首先进行用户身份校验,若存在该用户,则生成token。
Controller:

@ApiOperation("登录")
    @RequestMapping(value = "/login", method = RequestMethod.POST)
    @ResponseBody
    public CommonResult login(@RequestBody User user, HttpServletResponse response) {
   
        try{
   
            String token = userService.login(user.getUsername(),user.getPassword());
            if (token == null) {
   
                return CommonResult.validateFailed("用户名或密码错误");
            }
            Map<String, String> tokenMap = new HashMap<>();
            tokenMap.put("token", token);
            tokenMap.put("tokenHead", 'Bearer');
            return CommonResult.success(tokenMap);
        }
        catch (Exception e){
   
            return CommonResult.failed();
        }
    };

Service:

    public String login(String username, String password) {
   
        UserExample example = new UserExample();
        String _password = SHA1.encode(password);
        example.createCriteria().andUsernameEqualTo(username).andPasswordEqualTo(_password).andStatusEqualTo(1);
        List<User> userList = userMapper.selectByExample(example);
        if (userList != null && userList.size() > 0) {
   
            User user = userList.get(0);
            return TokenUtil.getToken(user);
        }
        return null;
    }

TokenUtil工具类:


import com.auth0.jwt.JWT;
import com.auth0.jwt.JWTVerifier;
import com.auth0.jwt.algorithms.Algorithm;
import com.auth0.jwt.exceptions.JWTVerificationException;
import com.auth0.jwt.interfaces.DecodedJWT;
import com.example.emall.entity.login.User;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值