| package com.doumee.api.gateway; | 
|   | 
| import com.doumee.config.annotation.LoginNoRequired; | 
| import com.doumee.config.jwt.JwtProperties; | 
| import com.doumee.config.jwt.JwtTokenUtil; | 
| import com.doumee.core.annotation.pr.PreventRepeat; | 
| import com.doumee.core.constants.ResponseStatus; | 
| import com.doumee.core.exception.BusinessException; | 
| import com.doumee.core.model.ApiResponse; | 
| import com.doumee.core.model.LoginUserInfo; | 
| import com.doumee.core.utils.Constants; | 
| import com.doumee.dao.system.dto.LoginDTO; | 
| import com.doumee.service.common.CaptchaService; | 
| import com.doumee.service.system.SystemLoginService; | 
| import com.doumee.service.system.SystemUserService; | 
| import io.swagger.annotations.Api; | 
| import io.swagger.annotations.ApiModel; | 
| import io.swagger.annotations.ApiOperation; | 
| import org.springframework.beans.factory.annotation.Autowired; | 
| import org.springframework.http.server.reactive.ServerHttpRequest; | 
| import org.springframework.validation.annotation.Validated; | 
| import org.springframework.web.bind.annotation.*; | 
| import org.springframework.web.server.ServerWebExchange; | 
|   | 
| import javax.annotation.Resource; | 
|   | 
| /** | 
|  * JWT获取令牌和刷新令牌接口 | 
|  */ | 
| @RestController | 
| @Api(tags ="鉴权登录接口") | 
| public class JwtAuthController { | 
|   | 
|     @Resource | 
|     private JwtProperties jwtProperties; | 
|     @Resource | 
|     private SystemUserService systemUserService; | 
|     @Resource | 
|     private JwtTokenUtil jwtTokenUtil; | 
|   | 
|     @Autowired | 
|     private SystemLoginService systemLoginService; | 
|     @Autowired | 
|     private CaptchaService captchaService; | 
|   | 
|     /** | 
|      * @author Eva.Caesar Liu | 
|      * @date 2023/03/21 14:49 | 
|      */ | 
|     @ApiOperation("获取图片验证码") | 
|     @GetMapping("/captcha") | 
|     public ApiResponse<CaptchaService.Captcha> getCaptcha() { | 
|         return ApiResponse.success(captchaService.genCaptcha()); | 
|     } | 
|   | 
|     @PreventRepeat(limit = 10, lockTime = 10000) | 
|     @ApiOperation("登录") | 
|     @PostMapping("/login") | 
|     @LoginNoRequired | 
|     public ApiResponse<String> login (@Validated @RequestBody LoginDTO dto, ServerWebExchange serverWebExchange) { | 
|         try { | 
|             ServerHttpRequest request = serverWebExchange.getRequest(); | 
|             LoginUserInfo user = systemLoginService.loginByPasswordNew(dto,request); | 
|             String token = jwtTokenUtil.generateToken(user); | 
|             return ApiResponse.success(token); | 
|         }catch (BusinessException e){ | 
|             return ApiResponse.failed(e.getCode(),e.getMessage()); | 
|         }catch (Exception e){ | 
|             e.printStackTrace(); | 
|             return ApiResponse.failed(ResponseStatus.SERVER_ERROR); | 
|         } | 
|     } | 
|   | 
|   | 
|     @PreventRepeat(limit = 10, lockTime = 10000) | 
|     @ApiOperation("H5业务登录") | 
|     @PostMapping("/loginH5") | 
|     @LoginNoRequired | 
|     public ApiResponse<String> loginH5 (@Validated @RequestBody LoginDTO dto, ServerWebExchange serverWebExchange) { | 
|         try { | 
|             ServerHttpRequest request = serverWebExchange.getRequest(); | 
|             dto.setCheckCode(false); | 
|             LoginUserInfo user = systemLoginService.loginByPasswordNew(dto,request); | 
|             String token = jwtTokenUtil.generateToken(user); | 
|             return ApiResponse.success(token); | 
|         }catch (BusinessException e){ | 
|             return ApiResponse.failed(e.getCode(),e.getMessage()); | 
|         }catch (Exception e){ | 
|             e.printStackTrace(); | 
|             return ApiResponse.failed(ResponseStatus.SERVER_ERROR); | 
|         } | 
|     } | 
|   | 
|   | 
|     /** | 
|      * 刷新JWT令牌,用旧的令牌换新的令牌 | 
|      */ | 
|     @PostMapping("/refreshtoken") | 
|     @ApiOperation("刷新token") | 
|     public ApiResponse<String> refreshtoken(@RequestHeader(Constants.HEADER_USER_TOKEN) String oldToken){ | 
|         try { | 
|             if(!jwtTokenUtil.isTokenExpired(oldToken)){ | 
|                 return ApiResponse.success(jwtTokenUtil.refreshToken(oldToken)); | 
|             } | 
|             return ApiResponse.failed("token已失效"); | 
|         }catch (BusinessException e){ | 
|             return ApiResponse.failed(e.getCode(),e.getMessage()); | 
|         }catch (Exception e){ | 
|             return ApiResponse.failed(ResponseStatus.SERVER_ERROR); | 
|         } | 
|   | 
|     } | 
|     /** | 
|      * 刷新JWT令牌,用旧的令牌换新的令牌 | 
|      */ | 
|     @PostMapping("/logout") | 
|     @ApiOperation("退出登陆") | 
|     public ApiResponse<String> logout(@RequestHeader(Constants.HEADER_USER_TOKEN) String oldToken){ | 
|         try { | 
|              jwtTokenUtil.logout(oldToken); | 
|         }catch (BusinessException e){ | 
|             return ApiResponse.failed(e.getCode(),e.getMessage()); | 
|         }catch (Exception e){ | 
|             return ApiResponse.failed(ResponseStatus.SERVER_ERROR); | 
|         } | 
|         return ApiResponse.success(null); | 
|   | 
|     } | 
|   | 
|     /** | 
|      * 刷新JWT令牌,用旧的令牌换新的令牌 | 
|      */ | 
|     @GetMapping("/getUserInfo") | 
|     @ApiOperation("获取当前登陆用户") | 
|     public ApiResponse<LoginUserInfo> getUserInfo(@RequestHeader(Constants.HEADER_USER_TOKEN) String token){ | 
|         try { | 
|             LoginUserInfo user =jwtTokenUtil.getUserInfoByToken(token); | 
|            if(user !=null){ | 
|                return ApiResponse.success( user); | 
|            } | 
|         }catch (BusinessException e){ | 
|             return ApiResponse.failed(e.getCode(),e.getMessage()); | 
|         }catch (Exception e){ | 
|             return ApiResponse.failed(ResponseStatus.SERVER_ERROR); | 
|         } | 
|         return ApiResponse.failed( "登录已失效"); | 
|     } | 
|   | 
| } |