123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119 |
- package com.iden.bms.controller;
- import cn.hutool.json.JSONUtil;
- import com.iden.bms.params.UserLoginParams;
- import com.iden.bms.service.SysUserService;
- import com.iden.common.cache.RedisKeyConstant;
- import com.iden.common.cache.RedisUtil;
- import com.iden.common.constant.Constants;
- import com.iden.common.exception.BDException;
- import com.iden.common.util.VerifyCodeUtil;
- import com.iden.common.vo.UserLoginedConvertVO;
- import com.iden.common.util.JwtUtils;
- import com.iden.common.util.Result;
- import com.iden.common.util.ResultCode;
- import io.jsonwebtoken.Claims;
- import io.swagger.annotations.Api;
- import io.swagger.annotations.ApiImplicitParam;
- import io.swagger.annotations.ApiImplicitParams;
- import io.swagger.annotations.ApiOperation;
- import lombok.extern.slf4j.Slf4j;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.http.MediaType;
- import org.springframework.web.bind.annotation.*;
- import javax.annotation.Resource;
- import javax.imageio.ImageIO;
- import javax.servlet.ServletOutputStream;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- import java.awt.image.BufferedImage;
- import java.util.HashMap;
- import java.util.Map;
- /**
- * Created by y on 2017/10/20.
- * @author y
- */
- @RestController
- @Api(value = "LoginController", tags = { "登录相关接口" })
- @Slf4j
- @RequestMapping("/bms")
- public class LoginController {
- @Resource
- RedisUtil redisUtil;
- @Autowired
- SysUserService sysUserService;
- @PostMapping(value = "/login", produces = MediaType.APPLICATION_JSON_VALUE)
- @ApiOperation(value = "登陆", notes = "登陆")
- public Result<Object> login(HttpServletRequest request, @RequestBody UserLoginParams userLoginParams) {
- try {
- //验证用户名密码
- UserLoginedConvertVO loginUser = sysUserService.getLoginUser(userLoginParams.getUsername(),userLoginParams.getPassword(),userLoginParams.getSecurityCode(),request);
- if (loginUser == null) {
- return Result.error("未找到相关用户");
- }
- //todo : 放入到 redis 中
- Map<String,Object> dataMap = new HashMap<>(2);
- dataMap.put("token",JwtUtils.generalToken(loginUser));
- dataMap.put("user",loginUser);
- return Result.success("登陆成功",dataMap);
- }catch (BDException ex) {
- return Result.error(ex.getMessage());
- } catch (Exception ex) {
- return new Result(ResultCode.NO_LOGINED,"登陆失败",ex.getMessage());
- }
- }
- @GetMapping(value = "/parseToken", produces = MediaType.APPLICATION_JSON_VALUE)
- @ApiOperation(value = "解析token", notes = "解析token")
- public Result<Object> tokenParse(HttpServletRequest request) {
- String commonJwt = request.getHeader(Constants.LOGIN_TOKEN_KEY);
- Claims claims = JwtUtils.tokenParse(commonJwt);
- if (claims != null) {
- UserLoginedConvertVO vo = JSONUtil.toBean(claims.getSubject(), UserLoginedConvertVO.class);
- if (vo != null) {
- return Result.success("解析成功",vo);
- }else{
- return Result.error("解析失败");
- }
- }
- return Result.error("解析失败");
- }
- //生成验证码
- @GetMapping("/getVerifyCode")
- @ApiImplicitParams({
- @ApiImplicitParam(name = "username", value = "账号",
- dataType = "String", paramType = "query",
- required = true)
- })
- public void getVerifyCode(HttpServletResponse response,
- @RequestParam(name = "username", required = true) String username) {
- try {
- //生成验证码
- String securityCode = VerifyCodeUtil.getSecurityCode();
- //将验证码放入redis
- redisUtil.hset(RedisKeyConstant.LOGIN_VALIDATE_CODE, username, securityCode, RedisKeyConstant.LOGIN_VALIDATE_CODE_TIME);
- //生成图片
- BufferedImage image = VerifyCodeUtil.createImage(securityCode);
- response.reset(); // 非常重要
- response.setContentType("image/png");
- //输出图片
- ServletOutputStream outputStream = response.getOutputStream();
- //调用工具类
- ImageIO.write(image, "png", outputStream);
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- }
|