2
2
3
3
import com .github .pagehelper .util .StringUtil ;
4
4
import com .study .model .Resources ;
5
+ import com .study .model .User ;
5
6
import com .study .service .ResourcesService ;
7
+ import org .apache .shiro .SecurityUtils ;
8
+ import org .apache .shiro .mgt .RealmSecurityManager ;
9
+ import org .apache .shiro .session .Session ;
6
10
import org .apache .shiro .spring .web .ShiroFilterFactoryBean ;
11
+ import org .apache .shiro .subject .SimplePrincipalCollection ;
12
+ import org .apache .shiro .subject .support .DefaultSubjectContext ;
7
13
import org .apache .shiro .web .filter .mgt .DefaultFilterChainManager ;
8
14
import org .apache .shiro .web .filter .mgt .PathMatchingFilterChainResolver ;
9
15
import org .apache .shiro .web .servlet .AbstractShiroFilter ;
16
+ import org .crazycake .shiro .RedisSessionDAO ;
10
17
import org .springframework .beans .factory .annotation .Autowired ;
11
18
import org .springframework .stereotype .Service ;
12
19
13
- import java .util .LinkedHashMap ;
14
- import java .util .List ;
15
- import java .util .Map ;
20
+ import java .util .*;
16
21
17
22
/**
18
23
* Created by yangqj on 2017年4月30日.
@@ -23,7 +28,8 @@ public class ShiroService {
23
28
private ShiroFilterFactoryBean shiroFilterFactoryBean ;
24
29
@ Autowired
25
30
private ResourcesService resourcesService ;
26
-
31
+ @ Autowired
32
+ private RedisSessionDAO redisSessionDAO ;
27
33
/**
28
34
* 初始化权限
29
35
*/
@@ -87,4 +93,40 @@ public void updatePermission() {
87
93
System .out .println ("更新权限成功!!" );
88
94
}
89
95
}
96
+
97
+ /**
98
+ * 根据userId 清除当前session存在的用户的权限缓存
99
+ * @param userIds 已经修改了权限的userId
100
+ */
101
+ public void clearUserAuthByUserId (List <Integer > userIds ){
102
+ if (null == userIds || userIds .size () == 0 ) return ;
103
+ //获取所有session
104
+ Collection <Session > sessions = redisSessionDAO .getActiveSessions ();
105
+ //定义返回
106
+ List <SimplePrincipalCollection > list = new ArrayList <SimplePrincipalCollection >();
107
+ for (Session session :sessions ){
108
+ //获取session登录信息。
109
+ Object obj = session .getAttribute (DefaultSubjectContext .PRINCIPALS_SESSION_KEY );
110
+ if (null != obj && obj instanceof SimplePrincipalCollection ){
111
+ //强转
112
+ SimplePrincipalCollection spc = (SimplePrincipalCollection )obj ;
113
+ //判断用户,匹配用户ID。
114
+ obj = spc .getPrimaryPrincipal ();
115
+ if (null != obj && obj instanceof User ){
116
+ User user = (User ) obj ;
117
+ System .out .println ("user:" +user );
118
+ //比较用户ID,符合即加入集合
119
+ if (null != user && userIds .contains (user .getId ())){
120
+ list .add (spc );
121
+ }
122
+ }
123
+ }
124
+ }
125
+ RealmSecurityManager securityManager =
126
+ (RealmSecurityManager ) SecurityUtils .getSecurityManager ();
127
+ MyShiroRealm realm = (MyShiroRealm )securityManager .getRealms ().iterator ().next ();
128
+ for (SimplePrincipalCollection simplePrincipalCollection : list ) {
129
+ realm .clearCachedAuthorizationInfo (simplePrincipalCollection );
130
+ }
131
+ }
90
132
}
0 commit comments