Skip to content

Commit 2b3fd0a

Browse files
authored
Merge pull request hs-web#7 from hs-web/2.1-SNAPSHOT
2.1 snapshot
2 parents 0a58760 + 1335ff1 commit 2b3fd0a

File tree

19 files changed

+170
-89
lines changed

19 files changed

+170
-89
lines changed

hsweb-web-bean/src/main/java/org/hsweb/web/bean/po/user/User.java

Lines changed: 15 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -111,42 +111,36 @@ public Set<Module> getModulesByPid(String pid, String level) {
111111
public boolean hasAccessRole(String rId) {
112112
if (getUserRoles() != null)
113113
return getUserRoles().stream().anyMatch(userRole -> userRole.getRoleId().equals(rId));
114-
// for (UserRole userRole : getUserRoles()) {
115-
// if (rId.equals(userRole.getRoleId())) return true;
116-
// }
117114
return false;
118115
}
119116

120117
public boolean hasAccessModule(String mId) {
121118
if (roleInfo == null) initRoleInfo();
122119
return roleInfo.keySet().stream().anyMatch(mdl -> mdl.getId().equals(mId));
123-
// for (Module module : roleInfo.keySet()) {
124-
// if (module.getId().equals(mId)) return true;
125-
// }
126-
// return false;
127120
}
128121

129122
/**
130123
* 初始化用户的权限角色信息
131124
*/
132125
public void initRoleInfo() {
133126
Map<Module, Set<String>> roleInfo_tmp = new LinkedHashMap<>();
134-
for (UserRole userRole : getUserRoles()) {
135-
Role role = userRole.getRole();
136-
if (role == null) continue;
137-
//角色可访问的路径
138-
List<RoleModule> roleModules = role.getModules();
139-
for (RoleModule roleModule : roleModules) {
140-
Module module = roleModule.getModule();
141-
if (module == null || module.getStatus() != 1) continue;
142-
Set<String> actions = roleInfo_tmp.get(module);
143-
if (actions == null)
144-
roleInfo_tmp.put(module, new HashSet<>(roleModule.getActions()));
145-
else {
146-
actions.addAll(roleModule.getActions());
127+
if (getUserRoles() != null)
128+
for (UserRole userRole : getUserRoles()) {
129+
Role role = userRole.getRole();
130+
if (role == null) continue;
131+
//角色可访问的路径
132+
List<RoleModule> roleModules = role.getModules();
133+
for (RoleModule roleModule : roleModules) {
134+
Module module = roleModule.getModule();
135+
if (module == null || module.getStatus() != 1) continue;
136+
Set<String> actions = roleInfo_tmp.get(module);
137+
if (actions == null)
138+
roleInfo_tmp.put(module, new HashSet<>(roleModule.getActions()));
139+
else {
140+
actions.addAll(roleModule.getActions());
141+
}
147142
}
148143
}
149-
}
150144
//排序
151145
roleInfo = MapUtils.sortMapByKey(roleInfo_tmp);
152146
}
@@ -291,8 +285,6 @@ public void setUpdateDate(java.util.Date updateDate) {
291285
}
292286

293287
public List<UserRole> getUserRoles() {
294-
if (userRoles == null)
295-
userRoles = new ArrayList<>();
296288
return userRoles;
297289
}
298290

hsweb-web-bean/src/main/java/org/hsweb/web/bean/validator/ValidateResults.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,11 @@
1111
* Created by 浩 on 2015-10-10 0010.
1212
*/
1313
public class ValidateResults extends ArrayList<ValidateResults.ValidResult> implements Serializable {
14-
private static final long serialVersionUID = 8910856253780046561L;
14+
private static final long serialVersionUID = 8910856253780046561L;
1515
/**
1616
* 是否验证通过
1717
*/
18-
private boolean success = true;
18+
private boolean success = true;
1919

2020
@Override
2121
public boolean addAll(Collection<? extends ValidResult> c) {
@@ -44,6 +44,7 @@ public void addResult(String field, String message) {
4444
public class ValidResult {
4545
public ValidResult() {
4646
}
47+
4748
/**
4849
* 带参数构造方法,用于初始化验证的字段和验证的结果
4950
*

hsweb-web-bean/src/main/java/org/hsweb/web/bean/validator/constraintvalidators/MessyCodeValidator.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,8 @@ public void initialize(NotMessyCode notMessyCode) {
3030

3131
@Override
3232
public boolean isValid(String s, ConstraintValidatorContext constraintValidatorContext) {
33-
if (null == s) return false;
34-
return StringUtils.isMessyCode(s);
33+
if (null == s) return true;
34+
return !StringUtils.isMessyCode(s);
3535
}
3636

3737

hsweb-web-concurrent/hsweb-web-concurrent-cache/src/main/java/org/hsweb/concureent/cache/monitor/SimpleMonitorCache.java

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -27,11 +27,11 @@
2727
public class SimpleMonitorCache extends ConcurrentMapCache implements MonitorCache {
2828

2929
private final AtomicInteger totalTimes = new AtomicInteger(0);
30-
private final AtomicInteger hitTimes = new AtomicInteger(0);
31-
private final AtomicInteger putTimes = new AtomicInteger(0);
30+
private final AtomicInteger hitTimes = new AtomicInteger(0);
31+
private final AtomicInteger putTimes = new AtomicInteger(0);
3232

3333
public SimpleMonitorCache(String name) {
34-
super(name, false);
34+
super(name, true);
3535
}
3636

3737
@Override
@@ -87,19 +87,20 @@ public <T> T get(Object key, Class<T> type) {
8787
}
8888

8989
protected Object buildValue(Object value) {
90+
if (null == value) return null;
9091
return new SoftReference(value);
9192
}
9293

9394
@Override
9495
public void put(Object key, Object value) {
95-
if (key == null || value == null) return;
96+
if (key == null) return;
9697
putTimes.addAndGet(1);
9798
super.put(key, buildValue(value));
9899
}
99100

100101
@Override
101102
public ValueWrapper putIfAbsent(Object key, Object value) {
102-
if (key == null || value == null) return null;
103+
if (key == null) return null;
103104
putTimes.addAndGet(1);
104105
return super.putIfAbsent(key, buildValue(value));
105106
}

hsweb-web-controller/src/main/java/org/hsweb/web/controller/module/ModuleMetaController.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@ protected ModuleMetaService getService() {
6565
public ResponseMessage userModuleMeta(@PathVariable String key) {
6666
User user = WebUtil.getLoginUser();
6767
List<UserRole> roles = user.getUserRoles();
68+
if (roles == null) roles = new ArrayList<>();
6869
String[] roleIdList = roles
6970
.stream()
7071
.map(userRole -> userRole.getRoleId())

hsweb-web-core/src/main/java/org/hsweb/web/core/authorize/AopAuthorizeValidator.java

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,6 @@
2424
import java.util.concurrent.ConcurrentHashMap;
2525
import java.util.concurrent.ConcurrentMap;
2626

27-
/**
28-
* Created by zhouhao on 16-4-28.
29-
*/
3027
public class AopAuthorizeValidator extends SimpleAuthorizeValidator {
3128

3229
private HttpSessionManager httpSessionManager;
@@ -57,7 +54,7 @@ protected AuthorizeValidatorConfig getConfig(ProceedingJoinPoint pjp) {
5754
return null;
5855
}
5956
Set<Authorize> authorizes = new LinkedHashSet<>();
60-
if (classAuth != null) {
57+
if (classAuth != null && (methodAuth == null || methodAuth.merge())) {
6158
if (classAuth.anonymous()) return null;
6259
authorizes.add(classAuth);
6360
}

hsweb-web-core/src/main/java/org/hsweb/web/core/authorize/annotation/Authorize.java

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,9 +56,18 @@
5656

5757
/**
5858
* 可匿名访问
59-
* @return 是否可匿名访问,匿名访问将不用登录
59+
*
60+
* @return 是否可匿名访问, 匿名访问将不用登录
6061
*/
6162
boolean anonymous() default false;
63+
64+
/**
65+
* 是否合并类上的注解
66+
*
67+
* @return 是否合并类上的注解
68+
*/
69+
boolean merge() default true;
70+
6271
/**
6372
* 验证模式,在使用多个验证条件时有效
6473
*

hsweb-web-core/src/main/java/org/hsweb/web/core/session/redis/RedisHttpSessionManager.java

Lines changed: 27 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
import org.hsweb.web.bean.po.user.User;
44
import org.hsweb.web.core.session.AbstractHttpSessionManager;
5+
import org.springframework.dao.DataAccessException;
6+
import org.springframework.data.redis.connection.RedisConnection;
57
import org.springframework.data.redis.core.RedisCallback;
68
import org.springframework.data.redis.core.RedisTemplate;
79
import org.springframework.session.ExpiringSession;
@@ -12,6 +14,7 @@
1214
import javax.servlet.http.HttpSessionContext;
1315
import java.util.Collections;
1416
import java.util.Enumeration;
17+
import java.util.HashSet;
1518
import java.util.Set;
1619
import java.util.stream.Collectors;
1720

@@ -46,12 +49,7 @@ public User getUserBySessionId(String sessionId) {
4649

4750
@Override
4851
public String getSessionIdByUserId(String userId) {
49-
return (String) sessionRedisTemplate.execute((RedisCallback<String>) connection -> {
50-
String key = "http.session.user:" + userId;
51-
byte[] sessionId = connection.get(key.getBytes());
52-
if (sessionId == null) return null;
53-
return new String(sessionId);
54-
});
52+
return (String) sessionRedisTemplate.opsForValue().get("http.session.user:" + userId);
5553
}
5654

5755
@Override
@@ -74,6 +72,7 @@ public void removeUser(String userId) {
7472

7573
@Override
7674
public void removeSession(String sessionId) {
75+
if (null == sessionId) return;
7776
sessionRedisTemplate.delete("spring:session:sessions:".concat(sessionId));
7877
}
7978

@@ -82,24 +81,34 @@ public void addUser(User user, HttpSession session) {
8281
removeUser(user.getId());
8382
String key = "http.session.user:" + user.getId();
8483
String value = session.getId();
84+
session.setAttribute("user", user);
8585
sessionRedisTemplate.opsForValue().set(key, value);
8686
onUserLogin(user, session);
8787
}
8888

89+
8990
@Override
9091
public Set<String> getUserIdList() {
91-
return (Set<String>) sessionRedisTemplate.execute((RedisCallback<Set<String>>) connection -> {
92-
Set<byte[]> keys = connection.keys("http.session.user:*".getBytes());
93-
return keys.stream().map(key -> {
94-
String sessionId = "spring:session:sessions:" + new String(connection.get(key));
95-
String userId = new String(key).split("[:]")[1];
96-
if (!connection.exists(sessionId.getBytes())) {
97-
removeUser(userId);
98-
return null;
92+
Set<String> keys = sessionRedisTemplate.keys("http.session.user:*");
93+
if (keys == null || keys.isEmpty()) {
94+
return new HashSet<>();
95+
}
96+
return keys.stream().map(key -> {
97+
String sessionId = (String) sessionRedisTemplate.opsForValue().get(key);
98+
String sessionIdKey = "spring:session:sessions:".concat(sessionId);
99+
String userId = new String(key).split("[:]")[1];
100+
boolean sessionExists = (Boolean) sessionRedisTemplate.execute(new RedisCallback<Boolean>() {
101+
@Override
102+
public Boolean doInRedis(RedisConnection connection) throws DataAccessException {
103+
return connection.exists(sessionIdKey.getBytes());
99104
}
100-
return userId;
101-
}).filter(key -> key != null).collect(Collectors.toSet());
102-
});
105+
});
106+
if (!sessionExists) {
107+
sessionRedisTemplate.delete(key);
108+
return null;
109+
}
110+
return userId;
111+
}).filter(key -> key != null).collect(Collectors.toSet());
103112
}
104113

105114
@Override
@@ -126,6 +135,7 @@ public boolean isLogin(String userId) {
126135
);
127136
}
128137

138+
129139
public void setRedisOperationsSessionRepository(RedisOperationsSessionRepository redisOperationsSessionRepository) {
130140
this.redisOperationsSessionRepository = redisOperationsSessionRepository;
131141
}

hsweb-web-core/src/main/java/org/hsweb/web/core/session/redis/RedisHttpSessionManagerConfiguration.java

Lines changed: 4 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import org.hsweb.web.core.session.HttpSessionManagerListener;
55
import org.springframework.beans.factory.annotation.Autowired;
66
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
7+
import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication;
78
import org.springframework.context.annotation.Bean;
89
import org.springframework.context.annotation.Configuration;
910
import org.springframework.core.Ordered;
@@ -14,25 +15,17 @@
1415
import javax.annotation.Resource;
1516
import java.util.List;
1617

17-
/**
18-
* Created by zhouhao on 16-5-27.
19-
*/
2018
@Configuration
2119
@ConditionalOnBean(value = RedisOperationsSessionRepository.class, name = "sessionRedisTemplate")
22-
@Order(Ordered.HIGHEST_PRECEDENCE)
20+
@ConditionalOnWebApplication
2321
public class RedisHttpSessionManagerConfiguration {
24-
@Autowired(required = false)
25-
private List<HttpSessionManagerListener> httpSessionManagerListeners;
2622

2723
@Resource(name = "sessionRedisTemplate")
2824
private RedisTemplate sessionRedisTemplate;
2925

30-
@Bean
31-
public HttpSessionManager sessionListener(RedisOperationsSessionRepository repository) {
26+
@Bean(name = "httpSessionManager")
27+
public HttpSessionManager redisHttpSessionManager(RedisOperationsSessionRepository repository) {
3228
RedisHttpSessionManager redisHttpSessionManager = new RedisHttpSessionManager();
33-
if (httpSessionManagerListeners != null) {
34-
redisHttpSessionManager.setListeners(httpSessionManagerListeners);
35-
}
3629
redisHttpSessionManager.setSessionRedisTemplate(sessionRedisTemplate);
3730
redisHttpSessionManager.setRedisOperationsSessionRepository(repository);
3831
return redisHttpSessionManager;

hsweb-web-core/src/main/java/org/hsweb/web/core/session/simple/SimpleHttpSessionManagerAutoConfiguration.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,16 +11,16 @@
1111
@ConditionalOnWebApplication
1212
public class SimpleHttpSessionManagerAutoConfiguration {
1313

14-
@Bean
15-
public HttpSessionManager simpleHttpSessionManager() {
14+
@Bean(name = "httpSessionManager")
15+
public HttpSessionManager httpSessionManager() {
1616
SimpleHttpSessionManager httpSessionManager = new SimpleHttpSessionManager();
1717
return httpSessionManager;
1818
}
1919

2020
@Bean
21-
public UserLoginOutListener sessionListener() {
21+
public UserLoginOutListener sessionListener(HttpSessionManager httpSessionManager) {
2222
UserLoginOutListener loginOutListener = new UserLoginOutListener();
23-
loginOutListener.setHttpSessionManager(simpleHttpSessionManager());
23+
loginOutListener.setHttpSessionManager(httpSessionManager);
2424
return loginOutListener;
2525
}
2626
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
local ids = redis.call('KEYS', 'http.session.user:*');
2+
local ids_ = {};
3+
for i, v in ipairs(ids) do
4+
5+
local userId = v:sub(19,-1);
6+
local sessoinId = redis.call('GET', v);
7+
local sessionExists = redis.call('EXISTS', 'spring:session:sessions:' .. sessoinId);
8+
if (sessionExists== 1)
9+
then
10+
table.insert(ids_, userId);
11+
else
12+
return sessoinId;
13+
-- redis.call("DEL", 'http.session.user:' .. userId);
14+
end
15+
end
16+
return ids_;

hsweb-web-datasource/src/main/java/org/hsweb/web/datasource/dynamic/DynamicXaDataSourceImpl.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -60,8 +60,10 @@ public DataSource getActiveDataSource() {
6060
logger.info("use datasource:{}", sourceId == null ? "default" : sourceId);
6161
if (sourceId == null || dynamicDataSourceService == null) return defaultDataSource;
6262
DataSource dataSource = dynamicDataSourceService.getDataSource(sourceId);
63-
logger.info("use datasource:{} fail,because its not exists! use default datasource now.", sourceId);
64-
if (dataSource == null) return defaultDataSource;
63+
if (dataSource == null) {
64+
logger.info("use datasource:{} fail,because its not exists! use default datasource now.", sourceId);
65+
return defaultDataSource;
66+
}
6567
return dataSource;
6668
}
6769

0 commit comments

Comments
 (0)