importcom.smart.ssai.admin.domain.User;importcom.smart.ssai.admin.service.UserService;importcom.smart.ssai.VO.Response;importcom.smart.ssai.common.utils.ResultVOUtil;importcom.smart.ssai.common.utils.ToolUtils;importcom.smart.ssai.constant.TokenConstant;importio.jsonwebtoken.JwtBuilder;importio.jsonwebtoken.Jwts;importio.jsonwebtoken.SignatureAlgorithm;importorg.springframework.beans.BeanUtils;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.http.ResponseEntity;importorg.springframework.web.bind.annotation.PostMapping;importorg.springframework.web.bind.annotation.RequestMapping;importorg.springframework.web.bind.annotation.RequestParam;importorg.springframework.web.bind.annotation.RestController;importjava.util.Date;importjava.util.HashMap;importjava.util.Map;
@RestController
@RequestMapping("/api")public classLoginController {
@AutowiredprivateUserService userService;/*** 用户登录
*@paramusername 用户名
*@parampassword 密码
*@return
*/@PostMapping("/login")public ResponseEntity login(@RequestParam(value = "username") String username
, @RequestParam(value= "password") String password){
User user=userService.getUserByUsername(username);//判断用户是否存在
if(null ==user){return ResultVOUtil.show(0,"用户不存在,请重新输入",null);
}//判断密码是否正确
String password1 =ToolUtils.md5Hex(password,String.valueOf(user.getCode()));if(!user.getPassword().equals(password1)){return ResultVOUtil.show(0,"用户密码错误",null);
}//登录成功,生成token,并更新数据库token和过期时间
Date date = newDate();
Integer nowTime= (int)(date.getTime()/1000);//当前时间戳
String token = createToken(user,date);//token
User model = newUser();
BeanUtils.copyProperties(user,model);//model.setId(user.getId());
model.setTimeout(nowTime);
model.setToken(token);
userService.insert(model);//跳转到指定页面,这里不跳转,返回token信息给前端
Map map = new HashMap<>();
map.put("token",token);return ResultVOUtil.show(1,"登录成功",map);
}/*** 生成token,根据有效的用户信息
*@paramuser 用户实例
*@paramdate 当前日期
*@return
*/
privateString createToken(User user, Date date){
SignatureAlgorithm signatureAlgorithm=SignatureAlgorithm.HS256;
JwtBuilder builder= Jwts.builder().setHeaderParam("typ", "JWT")//设置header
.setHeaderParam("alg", "HS256").setIssuedAt(date)//设置签发时间
.setExpiration(new Date(date.getTime() + TokenConstant.EXPIRE))//设置过期时间,30天,超出int,要加L
.claim("userid",String.valueOf(user.getId()))//设置内容
.setIssuer(TokenConstant.ISSUER)//设置签发人
.signWith(signatureAlgorithm, TokenConstant.SECRETKEY);//签名,需要算法和key
String jwt =builder.compact();returnjwt;
}
}