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.dao.system.dto.LoginPhoneDTO;
|
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.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();
|
dto.setCheckCode(true);
|
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("短信验证码登录")
|
@PostMapping("/loginByPhone")
|
@LoginNoRequired
|
public ApiResponse<String> loginByPhone (@Validated @RequestBody LoginPhoneDTO dto, ServerWebExchange serverWebExchange) {
|
try {
|
ServerHttpRequest request = serverWebExchange.getRequest();
|
LoginUserInfo user = systemLoginService.loginByPhone(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);
|
}
|
}
|
|
@PreventRepeat(limit = 10, lockTime = 10000)
|
@ApiOperation("司机登录")
|
@PostMapping("/loginDriver")
|
@LoginNoRequired
|
public ApiResponse<String> loginDriver (@Validated @RequestBody LoginDTO dto, ServerWebExchange serverWebExchange) {
|
try {
|
ServerHttpRequest request = serverWebExchange.getRequest();
|
dto.setCheckCode(false);
|
LoginUserInfo user = systemLoginService.driverLogin(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( "登录已失效");
|
}
|
|
}
|