package com.muyu.auth.controller; import com.muyu.auth.domain.LoginUserReq; import com.muyu.auth.domain.RegisterBody; import com.muyu.auth.domain.TokenResp; import com.muyu.auth.service.SysLoginService; import com.muyu.common.core.domain.Result; import com.muyu.common.core.text.Convert; import com.muyu.common.core.utils.JwtUtils; import com.muyu.common.core.utils.StringUtils; import com.muyu.common.security.auth.AuthUtil; import com.muyu.common.security.service.TokenService; import com.muyu.common.security.utils.SecurityUtils; import com.muyu.common.system.domain.LoginUser; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RestController; import jakarta.servlet.http.HttpServletRequest; import java.util.Map; /** * token 控制 * * @author muyu */ @RestController @Tag(name = "鉴权接口",description = "鉴权相关控制层") public class TokenController { @Autowired private TokenService tokenService; @Autowired private SysLoginService sysLoginService; @PostMapping("login") @Operation(summary = "登录接口",description = "登录鉴权接口") public Result login (@RequestBody LoginUserReq form) { // 用户登录 LoginUser userInfo = sysLoginService.login(form.getUsername(), form.getPassword()); // 获取登录token Map tokenMap = tokenService.createToken(userInfo); return Result.success( TokenResp.builder() .accessToken(Convert.toStr(tokenMap.get("access_token"))) .expiresIn(Convert.toLong(tokenMap.get("expires_in"))) .build() ); } @DeleteMapping("logout") @Operation(summary = "注销接口",description = "用户注销接口") public Result logout (HttpServletRequest request) { String token = SecurityUtils.getToken(request); if (StringUtils.isNotEmpty(token)) { String username = JwtUtils.getUserName(token); // 删除用户缓存记录 AuthUtil.logoutByToken(token); // 记录用户退出日志 sysLoginService.logout(username); } return Result.success(); } @PostMapping("refresh") @Operation(summary = "用户登录时间刷新",description = "用户登录时间刷新接口,可以进行用户token续约") public Result refresh (HttpServletRequest request) { LoginUser loginUser = tokenService.getLoginUser(request); if (StringUtils.isNotNull(loginUser)) { // 刷新令牌有效期 tokenService.refreshToken(loginUser); return Result.success(); } return Result.success(); } @PostMapping("register") public Result register (@RequestBody RegisterBody registerBody) { // 用户注册 sysLoginService.register(registerBody.getUsername(), registerBody.getPassword()); return Result.success(); } }