Skip to content

Commit e6848f9

Browse files
committed
资源关系缓存修改为reids.
1 parent 7e3b102 commit e6848f9

File tree

10 files changed

+126
-62
lines changed

10 files changed

+126
-62
lines changed

pom.xml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,12 @@
8181
<groupId>org.crazycake</groupId>
8282
<artifactId>shiro-redis</artifactId>
8383
<version>2.4.2.1-RELEASE</version>
84+
<exclusions>
85+
<exclusion>
86+
<artifactId>shiro-core</artifactId>
87+
<groupId>org.apache.shiro</groupId>
88+
</exclusion>
89+
</exclusions>
8490
</dependency>
8591
</dependencies>
8692

src/main/java/com/study/config/ShiroConfig.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,9 @@ public class ShiroConfig {
4141
@Value("${spring.redis.timeout}")
4242
private int timeout;
4343

44+
@Value("${spring.redis.password}")
45+
private String password;
46+
4447
@Bean
4548
public static LifecycleBeanPostProcessor getLifecycleBeanPostProcessor() {
4649
return new LifecycleBeanPostProcessor();
@@ -112,7 +115,7 @@ public SecurityManager securityManager(){
112115
//设置realm.
113116
securityManager.setRealm(myShiroRealm());
114117
// 自定义缓存实现 使用redis
115-
//securityManager.setCacheManager(cacheManager());
118+
securityManager.setCacheManager(cacheManager());
116119
// 自定义session管理 使用redis
117120
securityManager.setSessionManager(sessionManager());
118121
return securityManager;
@@ -167,7 +170,7 @@ public RedisManager redisManager() {
167170
redisManager.setPort(port);
168171
redisManager.setExpire(1800);// 配置缓存过期时间
169172
redisManager.setTimeout(timeout);
170-
// redisManager.setPassword(password);
173+
// redisManager.setPassword(password);
171174
return redisManager;
172175
}
173176

src/main/java/com/study/controller/ResourcesController.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ public List<Resources> loadMenu(){
5757
return resourcesList;
5858
}
5959

60-
@CacheEvict(cacheNames="resources", allEntries=true)
60+
//@CacheEvict(cacheNames="resources", allEntries=true)
6161
@RequestMapping(value = "/add")
6262
public String add(Resources resources){
6363
try{
@@ -70,7 +70,7 @@ public String add(Resources resources){
7070
return "fail";
7171
}
7272
}
73-
@CacheEvict(cacheNames="resources", allEntries=true)
73+
//@CacheEvict(cacheNames="resources", allEntries=true)
7474
@RequestMapping(value = "/delete")
7575
public String delete(Integer id){
7676
try{

src/main/java/com/study/service/impl/ResourcesServiceImpl.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ public List<Resources> queryAll(){
4040
}
4141

4242
@Override
43-
@Cacheable(cacheNames="resources",key="#map['userid'].toString()+#map['type']")
43+
//@Cacheable(cacheNames="resources",key="#map['userid'].toString()+#map['type']")
4444
public List<Resources> loadUserResources(Map<String, Object> map) {
4545
return resourcesMapper.loadUserResources(map);
4646
}

src/main/java/com/study/service/impl/RoleResourcesServiceImpl.java

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,9 @@
33
import com.study.mapper.UserRoleMapper;
44
import com.study.model.RoleResources;
55
import com.study.service.RoleResourcesService;
6+
import com.study.shiro.MyShiroRealm;
67
import com.study.shiro.ShiroService;
8+
import org.springframework.beans.factory.annotation.Autowired;
79
import org.springframework.cache.annotation.CacheEvict;
810
import org.springframework.stereotype.Service;
911
import org.springframework.transaction.annotation.Propagation;
@@ -19,16 +21,17 @@
1921
*/
2022
@Service("roleResourcesService")
2123
public class RoleResourcesServiceImpl extends BaseService<RoleResources> implements RoleResourcesService {
22-
/* @Resource
23-
private UserRoleMapper userRoleMapper;
2424
@Resource
25+
private UserRoleMapper userRoleMapper;
26+
/*@Resource
2527
private ShiroService shiroService;*/
26-
28+
@Autowired
29+
private MyShiroRealm myShiroRealm;
2730

2831
@Override
2932
//更新权限
3033
@Transactional(propagation= Propagation.REQUIRED,readOnly=false,rollbackFor={Exception.class})
31-
@CacheEvict(cacheNames="resources", allEntries=true)
34+
//@CacheEvict(cacheNames="resources", allEntries=true)
3235
public void addRoleResources(RoleResources roleResources) {
3336
//删除
3437
Example example = new Example(RoleResources.class);
@@ -46,9 +49,9 @@ public void addRoleResources(RoleResources roleResources) {
4649
}
4750
}
4851

49-
//List<Integer> userIds= userRoleMapper.findUserIdByRoleId(roleResources.getRoleid());
52+
List<Integer> userIds= userRoleMapper.findUserIdByRoleId(roleResources.getRoleid());
5053
//更新当前登录的用户的权限缓存
51-
//shiroService.clearUserAuthByUserId(userIds);
54+
myShiroRealm.clearUserAuthByUserId(userIds);
5255

5356

5457
}

src/main/java/com/study/service/impl/UserRoleServiceImpl.java

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,23 @@
22

33
import com.study.model.UserRole;
44
import com.study.service.UserRoleService;
5+
import com.study.shiro.MyShiroRealm;
6+
import org.springframework.beans.factory.annotation.Autowired;
57
import org.springframework.stereotype.Service;
68
import org.springframework.transaction.annotation.Propagation;
79
import org.springframework.transaction.annotation.Transactional;
810
import tk.mybatis.mapper.entity.Example;
911

12+
import java.util.ArrayList;
13+
import java.util.List;
14+
1015
/**
1116
* Created by yangqj on 2017/4/26.
1217
*/
13-
@Service("serRoleService")
18+
@Service("userRoleService")
1419
public class UserRoleServiceImpl extends BaseService<UserRole> implements UserRoleService {
15-
20+
@Autowired
21+
private MyShiroRealm myShiroRealm;
1622

1723
@Override
1824
@Transactional(propagation= Propagation.REQUIRED,readOnly=false,rollbackFor={Exception.class})
@@ -30,6 +36,9 @@ public void addUserRole(UserRole userRole) {
3036
u.setRoleid(roleId);
3137
mapper.insert(u);
3238
}
33-
39+
//更新当前登录的用户的权限缓存
40+
List<Integer> userid = new ArrayList<Integer>();
41+
userid.add(userRole.getUserid());
42+
myShiroRealm.clearUserAuthByUserId(userid);
3443
}
3544
}

src/main/java/com/study/shiro/MyShiroRealm.java

Lines changed: 42 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -8,15 +8,18 @@
88
import org.apache.shiro.authc.*;
99
import org.apache.shiro.authz.AuthorizationInfo;
1010
import org.apache.shiro.authz.SimpleAuthorizationInfo;
11+
import org.apache.shiro.mgt.RealmSecurityManager;
1112
import org.apache.shiro.realm.AuthorizingRealm;
1213
import org.apache.shiro.session.Session;
1314
import org.apache.shiro.subject.PrincipalCollection;
15+
import org.apache.shiro.subject.SimplePrincipalCollection;
16+
import org.apache.shiro.subject.support.DefaultSubjectContext;
1417
import org.apache.shiro.util.ByteSource;
18+
import org.crazycake.shiro.RedisSessionDAO;
19+
import org.springframework.beans.factory.annotation.Autowired;
1520

1621
import javax.annotation.Resource;
17-
import java.util.HashMap;
18-
import java.util.List;
19-
import java.util.Map;
22+
import java.util.*;
2023

2124
/**
2225
* Created by yangqj on 2017/4/21.
@@ -29,6 +32,9 @@ public class MyShiroRealm extends AuthorizingRealm {
2932
@Resource
3033
private ResourcesService resourcesService;
3134

35+
@Autowired
36+
private RedisSessionDAO redisSessionDAO;
37+
3238
//授权
3339
@Override
3440
protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) {
@@ -67,14 +73,40 @@ protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token)
6773
return authenticationInfo;
6874
}
6975

76+
7077
/**
71-
* 指定principalCollection 清除
78+
* 根据userId 清除当前session存在的用户的权限缓存
79+
* @param userIds 已经修改了权限的userId
7280
*/
73-
/* public void clearCachedAuthorizationInfo(PrincipalCollection principalCollection) {
74-
75-
SimplePrincipalCollection principals = new SimplePrincipalCollection(
76-
principalCollection, getName());
77-
super.clearCachedAuthorizationInfo(principals);
81+
public void clearUserAuthByUserId(List<Integer> userIds){
82+
if(null == userIds || userIds.size() == 0) return ;
83+
//获取所有session
84+
Collection<Session> sessions = redisSessionDAO.getActiveSessions();
85+
//定义返回
86+
List<SimplePrincipalCollection> list = new ArrayList<SimplePrincipalCollection>();
87+
for (Session session:sessions){
88+
//获取session登录信息。
89+
Object obj = session.getAttribute(DefaultSubjectContext.PRINCIPALS_SESSION_KEY);
90+
if(null != obj && obj instanceof SimplePrincipalCollection){
91+
//强转
92+
SimplePrincipalCollection spc = (SimplePrincipalCollection)obj;
93+
//判断用户,匹配用户ID。
94+
obj = spc.getPrimaryPrincipal();
95+
if(null != obj && obj instanceof User){
96+
User user = (User) obj;
97+
System.out.println("user:"+user);
98+
//比较用户ID,符合即加入集合
99+
if(null != user && userIds.contains(user.getId())){
100+
list.add(spc);
101+
}
102+
}
103+
}
104+
}
105+
RealmSecurityManager securityManager =
106+
(RealmSecurityManager) SecurityUtils.getSecurityManager();
107+
MyShiroRealm realm = (MyShiroRealm)securityManager.getRealms().iterator().next();
108+
for (SimplePrincipalCollection simplePrincipalCollection : list) {
109+
realm.clearCachedAuthorizationInfo(simplePrincipalCollection);
110+
}
78111
}
79-
*/
80112
}

src/main/java/com/study/shiro/ShiroService.java

Lines changed: 3 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,8 @@ public class ShiroService {
2828
private ShiroFilterFactoryBean shiroFilterFactoryBean;
2929
@Autowired
3030
private ResourcesService resourcesService;
31-
@Autowired
32-
private RedisSessionDAO redisSessionDAO;
31+
/* @Autowired
32+
private RedisSessionDAO redisSessionDAO;*/
3333
/**
3434
* 初始化权限
3535
*/
@@ -94,39 +94,5 @@ public void updatePermission() {
9494
}
9595
}
9696

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-
}*/
97+
13298
}

src/main/resources/application.properties

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
debug=true
22
logging.level.tk.mybatis=TRACE
3+
#logging.level.org.crazycake.shiro=debug
34
#mapper接口代理 输入sql语句 logging.level.包名
45
logging.level.com.study=trace
56
logging.level.org.springframework.web=DEBUG
@@ -53,4 +54,6 @@ spring.redis.pool.max-active= 8
5354
# 连接池最大阻塞等待时间(使用负值表示没有限制)
5455
spring.redis.pool.max-wait= -1
5556
# 连接超时时间(毫秒)
56-
spring.redis.timeout= 0
57+
spring.redis.timeout= 0
58+
spring.redis.password=
59+
spring.mvc.favicon.enabled=false
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
package com.study;
2+
3+
4+
import com.study.model.User;
5+
import org.crazycake.shiro.RedisCacheManager;
6+
import org.crazycake.shiro.RedisManager;
7+
import org.crazycake.shiro.SerializeUtils;
8+
import org.junit.Test;
9+
10+
/**
11+
* Created by yangqj on 2018/1/13.
12+
*/
13+
public class TestRedis {
14+
@Test
15+
public void test(){
16+
RedisManager redisManager = new RedisManager();
17+
redisManager.init();
18+
19+
User user = new User();
20+
user.setId(2);
21+
user.setUsername("admin");
22+
user.setPassword("3esdfffdsdfergfwdfdsfsdfewer");
23+
user.setEnable(1);
24+
byte[] serialize = SerializeUtils.serialize(user);
25+
redisManager.set(serialize,"testvalue".getBytes());
26+
}
27+
28+
29+
30+
@Test
31+
public void test2(){
32+
RedisManager redisManager = new RedisManager();
33+
redisManager.init();
34+
User user = new User();
35+
user.setId(2);
36+
user.setUsername("admin");
37+
user.setPassword("3esdfffdsdfergfwdfdsfsdfewer");
38+
user.setEnable(1);
39+
byte[] serialize = SerializeUtils.serialize(user);
40+
redisManager.del(serialize);
41+
}
42+
}

0 commit comments

Comments
 (0)