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; 
 | 
import java.util.Objects; 
 | 
  
 | 
/** 
 | 
 * 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); 
 | 
  
 | 
    } 
 | 
  
 | 
  
 | 
    @PostMapping("/logoutForH5") 
 | 
    @ApiOperation("退出登陆") 
 | 
    public ApiResponse<String> logoutForH5(@RequestHeader(Constants.HEADER_USER_TOKEN) String oldToken){ 
 | 
        try { 
 | 
            jwtTokenUtil.logoutForH5(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( "登录已失效"); 
 | 
    } 
 | 
  
 | 
} 
 |