版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u011277745/article/details/80865581
创建一个单例对象
package com.myshiro.support.support.manager;
import java.util.TimerTask;
import java.util.concurrent.ScheduledThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
/* *
* @Author xuzn
* @Description 日志操作任务运行管理器 单例
*/
public class LogExeManager {
private static final int LOG_DELAY_TIME = 10;
//
private ScheduledThreadPoolExecutor executor = new ScheduledThreadPoolExecutor(20);
// 创建一个私有静态对象
private static LogExeManager logExeManager = new LogExeManager();
// 定义一个无参数的构造函数
private LogExeManager() {
}
// 对外提供实例方法-返回对象本身
public static LogExeManager getInstance() {
return logExeManager;
}
// 定义一个方法
public void executeLogTask(TimerTask timerTask) {
executor.schedule(timerTask, LOG_DELAY_TIME, TimeUnit.MICROSECONDS);
}
}
实现方法如下:
@ApiOperation(value = "用户登出", httpMethod = "POST")
@PostMapping("/exit")
public Message accountExit(HttpServletRequest request) {
SecurityUtils.getSubject().logout();
Map<String,String > map = getRequestHeader(request);
String appId = map.get("appId");
if (StringUtils.isEmpty(appId)) {
return new Message().error(1111, "用户未登录无法登出");
}
String jwt = redisTemplate.opsForValue().get("JWT-SESSION-"+appId);
if (StringUtils.isEmpty(jwt)) {
return new Message().error(1111, "用户未登录无法登出");
}
redisTemplate.opsForValue().getOperations().delete("JWT-SESSION-"+appId);
// 日志操作-单例模式
LogExeManager.getInstance().executeLogTask(LogTaskFactory.exitLog(appId,request.getRemoteAddr(),(short)1,""));
return new Message().ok(6666, "用户退出成功");
}