LoginController.java 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. package com.iden.bms.controller;
  2. import cn.hutool.json.JSONUtil;
  3. import com.iden.bms.params.UserLoginParams;
  4. import com.iden.bms.service.SysUserService;
  5. import com.iden.common.cache.RedisKeyConstant;
  6. import com.iden.common.cache.RedisUtil;
  7. import com.iden.common.constant.Constants;
  8. import com.iden.common.exception.BDException;
  9. import com.iden.common.util.VerifyCodeUtil;
  10. import com.iden.common.vo.UserLoginedConvertVO;
  11. import com.iden.common.util.JwtUtils;
  12. import com.iden.common.util.Result;
  13. import com.iden.common.util.ResultCode;
  14. import io.jsonwebtoken.Claims;
  15. import io.swagger.annotations.Api;
  16. import io.swagger.annotations.ApiImplicitParam;
  17. import io.swagger.annotations.ApiImplicitParams;
  18. import io.swagger.annotations.ApiOperation;
  19. import lombok.extern.slf4j.Slf4j;
  20. import org.springframework.beans.factory.annotation.Autowired;
  21. import org.springframework.http.MediaType;
  22. import org.springframework.web.bind.annotation.*;
  23. import javax.annotation.Resource;
  24. import javax.imageio.ImageIO;
  25. import javax.servlet.ServletOutputStream;
  26. import javax.servlet.http.HttpServletRequest;
  27. import javax.servlet.http.HttpServletResponse;
  28. import java.awt.image.BufferedImage;
  29. import java.util.HashMap;
  30. import java.util.Map;
  31. /**
  32. * Created by y on 2017/10/20.
  33. * @author y
  34. */
  35. @RestController
  36. @Api(value = "LoginController", tags = { "登录相关接口" })
  37. @Slf4j
  38. @RequestMapping("/bms")
  39. public class LoginController {
  40. @Resource
  41. RedisUtil redisUtil;
  42. @Autowired
  43. SysUserService sysUserService;
  44. @PostMapping(value = "/login", produces = MediaType.APPLICATION_JSON_VALUE)
  45. @ApiOperation(value = "登陆", notes = "登陆")
  46. public Result<Object> login(HttpServletRequest request, @RequestBody UserLoginParams userLoginParams) {
  47. try {
  48. //验证用户名密码
  49. UserLoginedConvertVO loginUser = sysUserService.getLoginUser(userLoginParams.getUsername(),userLoginParams.getPassword(),userLoginParams.getSecurityCode(),request);
  50. if (loginUser == null) {
  51. return Result.error("未找到相关用户");
  52. }
  53. //todo : 放入到 redis 中
  54. Map<String,Object> dataMap = new HashMap<>(2);
  55. dataMap.put("token",JwtUtils.generalToken(loginUser));
  56. dataMap.put("user",loginUser);
  57. return Result.success("登陆成功",dataMap);
  58. }catch (BDException ex) {
  59. return Result.error(ex.getMessage());
  60. } catch (Exception ex) {
  61. return new Result(ResultCode.NO_LOGINED,"登陆失败",ex.getMessage());
  62. }
  63. }
  64. @GetMapping(value = "/parseToken", produces = MediaType.APPLICATION_JSON_VALUE)
  65. @ApiOperation(value = "解析token", notes = "解析token")
  66. public Result<Object> tokenParse(HttpServletRequest request) {
  67. String commonJwt = request.getHeader(Constants.LOGIN_TOKEN_KEY);
  68. Claims claims = JwtUtils.tokenParse(commonJwt);
  69. if (claims != null) {
  70. UserLoginedConvertVO vo = JSONUtil.toBean(claims.getSubject(), UserLoginedConvertVO.class);
  71. if (vo != null) {
  72. return Result.success("解析成功",vo);
  73. }else{
  74. return Result.error("解析失败");
  75. }
  76. }
  77. return Result.error("解析失败");
  78. }
  79. //生成验证码
  80. @GetMapping("/getVerifyCode")
  81. @ApiImplicitParams({
  82. @ApiImplicitParam(name = "username", value = "账号",
  83. dataType = "String", paramType = "query",
  84. required = true)
  85. })
  86. public void getVerifyCode(HttpServletResponse response,
  87. @RequestParam(name = "username", required = true) String username) {
  88. try {
  89. //生成验证码
  90. String securityCode = VerifyCodeUtil.getSecurityCode();
  91. //将验证码放入redis
  92. redisUtil.hset(RedisKeyConstant.LOGIN_VALIDATE_CODE, username, securityCode, RedisKeyConstant.LOGIN_VALIDATE_CODE_TIME);
  93. //生成图片
  94. BufferedImage image = VerifyCodeUtil.createImage(securityCode);
  95. response.reset(); // 非常重要
  96. response.setContentType("image/png");
  97. //输出图片
  98. ServletOutputStream outputStream = response.getOutputStream();
  99. //调用工具类
  100. ImageIO.write(image, "png", outputStream);
  101. } catch (Exception e) {
  102. e.printStackTrace();
  103. }
  104. }
  105. }