package com.ruoyi.auth.controller; import com.ruoyi.auth.form.LoginBody; import com.ruoyi.auth.service.SysLoginService; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.utils.JwtUtils; import com.ruoyi.common.core.utils.StringUtils; import com.ruoyi.common.security.auth.AuthUtil; import com.ruoyi.common.security.service.TokenService; import com.ruoyi.common.security.utils.SecurityUtils; import com.ruoyi.system.api.client.SysUserClient; import com.ruoyi.system.api.domain.SysUser; import com.ruoyi.system.api.model.LoginUser; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; 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 javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import java.util.Date; import java.util.HashMap; /** * token 控制 * * @author ruoyi */ @RestController @Api(tags = "后台-登录") public class TokenController { @Autowired private TokenService tokenService; @Autowired private SysLoginService sysLoginService; @Resource private SysUserClient sysUserClient; @PostMapping("login") @ApiOperation(value = "登录", tags = "后台-登录") public R login(@RequestBody LoginBody form) { // 用户登录 LoginUser userInfo = sysLoginService.login(form.getUsername(), form.getPassword()); HashMap map = new HashMap<>(8); map.put("token", tokenService.createToken(userInfo)); // 获取登录token String roles = userInfo.getRole(); if (null == roles) { return R.fail("请关联角色!"); } map.put("roleName", roles); map.put("info", userInfo); // 权限集合 map.put("permissions", userInfo.getPermissions()); // 修改用户最后登录时间 SysUser sysUser = new SysUser(); sysUser.setUserId(userInfo.getSysUser().getUserId()); sysUser.setLoginDate(new Date()); sysUserClient.updateSysUser(sysUser); return R.ok(map); } @DeleteMapping("logout") @ApiOperation(value = "退出登录", tags = "后台-登录") public R logout(HttpServletRequest request) { String token = SecurityUtils.getToken(request); if (StringUtils.isNotEmpty(token)) { String username = JwtUtils.getUserName(token); // 删除用户缓存记录 AuthUtil.logoutByToken(token); // 记录用户退出日志 sysLoginService.logout(username); } return R.ok(); } @PostMapping("refresh") @ApiOperation(value = "刷新token", tags = "后台-登录") public R refresh(HttpServletRequest request) { LoginUser loginUser = tokenService.getLoginUser(request); if (StringUtils.isNotNull(loginUser)) { // 刷新令牌有效期 tokenService.refreshToken(loginUser); return R.ok(); } return R.ok(); } }