LiiuZeYu_branch
lzy 10 months ago
parent 71b960cc0b
commit 1dc9ea7ad3

@ -0,0 +1,71 @@
/*
* Copyright (c) 2018-2999 广 All rights reserved.
*
* https://www.mall4j.com/
*
*
*
*
*/
package com.yami.shop.security.common.controller;
// 导入Hutool工具库中用于字符串操作的工具类此处用于判断字符串是否为空空白字符串方便进行逻辑判断
import cn.hutool.core.util.StrUtil;
// 导入项目自定义的用于封装服务器响应信息的实体类包含响应状态码、消息、数据等内容用于统一向客户端返回响应结果此处响应数据为Void表示无具体数据返回
import com.yami.shop.common.response.ServerResponseEntity;
// 导入与安全相关的用于管理Token存储和操作的类负责对Token进行删除等相关管理操作此处用于删除用户的登录Token
import com.yami.shop.security.common.manager.TokenStore;
// 导入Swagger相关的注解用于生成API文档@Operation注解用于描述接口的功能摘要和详细信息方便前端开发人员等查看接口的作用和使用方式
import io.swagger.v3.oas.annotations.Operation;
// 导入Swagger相关的注解用于给接口分类添加标签方便文档中进行分组展示和说明此处标记为"注销"类别
import io.swagger.v3.oas.annotations.tags.Tag;
// 导入Spring框架用于实现依赖注入的注解表明后续的属性需要由Spring容器进行注入实例化此处用于注入TokenStore实例
import org.springframework.beans.factory.annotation.Autowired;
// 导入Spring框架用于定义处理POST请求的注解将下面的方法映射为一个接收POST请求的接口处理对应的业务逻辑即处理用户退出登录的请求
import org.springframework.web.bind.annotation.PostMapping;
// 导入Spring框架用于将类标记为RESTful风格的控制器的注解表明该类中的方法主要用于处理HTTP请求并返回JSON等格式的响应数据
import org.springframework.web.bind.annotation.RestController;
// 导入Servlet相关的用于操作HTTP请求的类用于获取请求头中的信息此处主要用于获取包含Token的"Authorization"请求头内容
import jakarta.servlet.http.HttpServletRequest;
/**
* LogoutControllerSpring RESTful退
* 退TokenTokenTokenStoreToken
* 使SwaggerAPI便使
*
* @author
* @date 2022/3/25 17:33
*/
@RestController
@Tag(name = "注销")
public class LogoutController {
// 通过Spring的依赖注入机制注入一个TokenStore实例用于管理Token的删除等相关操作以实现清除用户登录Token的功能
@Autowired
private TokenStore tokenStore;
/**
* 退HTTPHttpServletRequest
* "Authorization"TokenToken
* 退
* TokenTokenStoreToken退
*
* @param request 退HttpServletRequestToken
* @return ServerResponseEntity<Void> Void退
*/
@PostMapping("/logOut")
@Operation(summary = "退出登陆", description = "点击退出登陆清除token清除菜单缓存")
public ServerResponseEntity<Void> logOut(HttpServletRequest request) {
// 从请求头中获取名为"Authorization"的Token信息通常在登录成功后客户端会在后续请求的这个请求头中携带Token用于身份验证等操作
String accessToken = request.getHeader("Authorization");
// 通过Hutool工具类判断获取到的Token信息是否为空空白字符串如果为空则直接返回成功的服务器响应实体表示可视为已退出登录可能本身就没登录
if (StrUtil.isBlank(accessToken)) {
return ServerResponseEntity.success();
}
// 如果获取到了有效的Token信息则调用注入的TokenStore实例的方法删除该用户在当前系统对应的Token实现清除登录状态的功能
tokenStore.deleteCurrentToken(accessToken);
return ServerResponseEntity.success();
}
}
Loading…
Cancel
Save