Skip to content

Commit ac5f846

Browse files
committed
feat: 退出登录清理缓存
1 parent 64fdf3b commit ac5f846

4 files changed

Lines changed: 22 additions & 2 deletions

File tree

ruoyi-framework/src/main/java/com/ruoyi/framework/config/ShiroConfig.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -250,6 +250,7 @@ public SecurityManager securityManager(UserRealm userRealm) {
250250
*/
251251
private LogoutFilter logoutFilter() {
252252
LogoutFilter logoutFilter = new LogoutFilter();
253+
logoutFilter.setCacheManager(getEhCacheManager());
253254
logoutFilter.setLoginUrl(loginUrl);
254255
return logoutFilter;
255256
}

ruoyi-framework/src/main/java/com/ruoyi/framework/shiro/service/SysPasswordService.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import java.util.concurrent.atomic.AtomicInteger;
44
import javax.annotation.PostConstruct;
55

6+
import com.ruoyi.common.constant.ShiroConstants;
67
import org.apache.shiro.cache.Cache;
78
import org.apache.shiro.cache.CacheManager;
89
import org.apache.shiro.crypto.hash.Md5Hash;
@@ -39,7 +40,7 @@ public SysPasswordService(CacheManager cacheManager) {
3940

4041
@PostConstruct
4142
public void init() {
42-
loginRecordCache = cacheManager.getCache("loginRecordCache");
43+
loginRecordCache = cacheManager.getCache(ShiroConstants.LOGINRECORDCACHE);
4344
}
4445

4546
public void validate(SysUser user, String password) {

ruoyi-framework/src/main/java/com/ruoyi/framework/shiro/web/filter/LogoutFilter.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,22 @@
22

33
import cn.hutool.core.util.StrUtil;
44
import com.ruoyi.common.constant.Constants;
5+
import com.ruoyi.common.constant.ShiroConstants;
56
import com.ruoyi.common.utils.MessageUtils;
67
import com.ruoyi.framework.manager.AsyncManager;
78
import com.ruoyi.framework.manager.factory.AsyncFactory;
89
import com.ruoyi.framework.util.ShiroUtils;
910
import com.ruoyi.system.domain.SysUser;
1011
import lombok.extern.slf4j.Slf4j;
1112
import org.apache.commons.lang3.ObjectUtils;
13+
import org.apache.shiro.cache.Cache;
14+
import org.apache.shiro.cache.CacheManager;
1215
import org.apache.shiro.subject.Subject;
1316

1417
import javax.servlet.ServletRequest;
1518
import javax.servlet.ServletResponse;
19+
import java.io.Serializable;
20+
import java.util.Deque;
1621

1722
/**
1823
* 退出过滤器
@@ -27,6 +32,8 @@ public class LogoutFilter extends org.apache.shiro.web.filter.authc.LogoutFilter
2732
*/
2833
private String loginUrl;
2934

35+
private Cache<String, Deque<Serializable>> cache;
36+
3037
public String getLoginUrl() {
3138
return loginUrl;
3239
}
@@ -45,6 +52,8 @@ protected boolean preHandle(ServletRequest request, ServletResponse response){
4552
String loginName = user.getLoginName();
4653
// 记录用户退出日志
4754
AsyncManager.me().execute(AsyncFactory.recordLogininfor(loginName, Constants.LOGOUT, MessageUtils.message("user.logout.success")));
55+
// 清理缓存
56+
cache.remove(loginName);
4857
}
4958
// 退出登录
5059
subject.logout();
@@ -66,4 +75,13 @@ protected String getRedirectUrl(ServletRequest request, ServletResponse response
6675
}
6776
return super.getRedirectUrl(request, response, subject);
6877
}
78+
79+
/**
80+
* 设置Cache的key的前缀
81+
* @param cacheManager 缓存管理器
82+
*/
83+
public void setCacheManager(CacheManager cacheManager) {
84+
// 必须和ehcache缓存配置中的缓存name一致
85+
this.cache = cacheManager.getCache(ShiroConstants.SYS_USERCACHE);
86+
}
6987
}

ruoyi-framework/src/main/java/com/ruoyi/framework/shiro/web/filter/kickout/KickoutSessionFilter.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ protected boolean onAccessDenied(ServletRequest request, ServletResponse respons
103103
try {
104104
// 获取被踢出的sessionId的session对象
105105
Session kickoutSession = sessionManager.getSession(new DefaultSessionKey(kickoutSessionId));
106-
if (null != kickoutSession) {
106+
if (ObjectUtil.isNotNull(kickoutSession)) {
107107
// 设置会话的kickout属性表示踢出了
108108
kickoutSession.setAttribute("kickout", true);
109109
}

0 commit comments

Comments
 (0)