一、完整流程
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