package com.iailab.module.pms.controller.admin.auth; import cn.hutool.core.util.StrUtil; import com.iailab.framework.common.pojo.CommonResult; import com.iailab.module.pms.client.OAuth2Client; import com.iailab.module.pms.client.dto.oauth2.OAuth2AccessTokenRespDTO; import com.iailab.module.pms.util.SecurityUtils; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; import javax.annotation.security.PermitAll; import javax.servlet.http.HttpServletRequest; @RestController @RequestMapping("/pms/auth") public class AuthController { @Resource private OAuth2Client oauth2Client; /** * 使用 code 访问令牌,获得访问令牌 * * @param code 授权码 * @param redirectUri 重定向 URI * @return 访问令牌;注意,实际项目中,最好创建对应的 ResponseVO 类,只返回必要的字段 */ @PostMapping("/loginBycode") @PermitAll public CommonResult loginByCode(@RequestParam("code") String code, @RequestParam("redirectUri") String redirectUri) { return oauth2Client.postAccessToken(code, redirectUri); } /** * 使用刷新令牌,获得(刷新)访问令牌 * * @param refreshToken 刷新令牌 * @return 访问令牌;注意,实际项目中,最好创建对应的 ResponseVO 类,只返回必要的字段 */ @PostMapping("/refresh-token") public CommonResult refreshToken(@RequestParam("refreshToken") String refreshToken) { return oauth2Client.refreshToken(refreshToken); } /** * 退出登录 * * @param request 请求 * @return 成功 */ @PostMapping("/logout") public CommonResult logout(HttpServletRequest request) { String token = SecurityUtils.obtainAuthorization(request, "Authorization"); if (StrUtil.isNotBlank(token)) { return oauth2Client.revokeToken(token); } // 返回成功 return new CommonResult<>(); } }