Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit e6848f9

Browse files
资源关系缓存修改为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

‎src/test/java/com/study/TestRedis.java

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)

AltStyle によって変換されたページ (->オリジナル) /