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 d3c65f9

Browse files
1.修复authentication-server 启动过程中没有获取到授权信息仍然能正常启动问题
2.修复resourceConfigAttributes可能存在的线程安全问题
1 parent 9ebab9d commit d3c65f9

File tree

4 files changed

+29
-17
lines changed

4 files changed

+29
-17
lines changed

‎auth/authentication-server/src/main/java/com/springboot/cloud/auth/authentication/config/LoadResourceDefine.java‎

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import org.springframework.security.web.util.matcher.RequestMatcher;
88
import org.springframework.stereotype.Component;
99

10+
import javax.annotation.PostConstruct;
1011
import java.util.Map;
1112

1213
/**
@@ -18,8 +19,13 @@ class LoadResourceDefine {
1819
@Autowired
1920
private IResourceService resourceService;
2021

21-
@Bean
22-
public Map<RequestMatcher, ConfigAttribute> resourceConfigAttributes() {
23-
return resourceService.loadResource();
22+
/**
23+
*取消返回的bean防止外部出现线程安全问题
24+
* 2020年5月15日
25+
* @return
26+
*/
27+
@PostConstruct
28+
public void resourceConfigAttributes() {
29+
resourceService.loadResource();
2430
}
2531
}

‎auth/authentication-server/src/main/java/com/springboot/cloud/auth/authentication/provider/ResourceProviderFallback.java‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ public class ResourceProviderFallback implements ResourceProvider {
1414
@Override
1515
public Result<Set<Resource>> resources() {
1616
log.error("认证服务启动时加载资源异常!未加载到资源");
17-
return Result.success(newHashSet<Resource>());
17+
return Result.fail();
1818
}
1919

2020
@Override

‎auth/authentication-server/src/main/java/com/springboot/cloud/auth/authentication/service/IResourceService.java‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ public interface IResourceService {
2929
/**
3030
* 加载权限资源数据
3131
*/
32-
Map<RequestMatcher, ConfigAttribute> loadResource();
32+
void loadResource();
3333

3434
/**
3535
* 根据url和method查询到对应的权限信息

‎auth/authentication-server/src/main/java/com/springboot/cloud/auth/authentication/service/impl/ResourceService.java‎

Lines changed: 18 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import com.springboot.cloud.auth.authentication.provider.ResourceProvider;
66
import com.springboot.cloud.auth.authentication.service.IResourceService;
77
import com.springboot.cloud.auth.authentication.service.NewMvcRequestMatcher;
8+
import com.springboot.cloud.common.core.entity.vo.Result;
89
import com.springboot.cloud.sysadmin.organization.entity.po.Resource;
910
import lombok.extern.slf4j.Slf4j;
1011
import org.springframework.beans.factory.annotation.Autowired;
@@ -16,6 +17,7 @@
1617
import org.springframework.web.servlet.handler.HandlerMappingIntrospector;
1718

1819
import javax.servlet.http.HttpServletRequest;
20+
import java.util.HashMap;
1921
import java.util.Map;
2022
import java.util.Set;
2123
import java.util.stream.Collectors;
@@ -33,40 +35,44 @@ public class ResourceService implements IResourceService {
3335
/**
3436
* 系统中所有权限集合
3537
*/
36-
private Map<RequestMatcher, ConfigAttribute> resourceConfigAttributes;
38+
private staticfinalMap<RequestMatcher, ConfigAttribute> resourceConfigAttributes = newHashMap<>();
3739

3840
@Override
39-
public void saveResource(Resource resource) {
41+
public synchronizedvoid saveResource(Resource resource) {
4042
resourceConfigAttributes.put(
4143
this.newMvcRequestMatcher(resource.getUrl(), resource.getMethod()),
4244
new SecurityConfig(resource.getCode())
4345
);
44-
log.info("resourceConfigAttributes size:{}", this.resourceConfigAttributes.size());
46+
log.info("resourceConfigAttributes size:{}", resourceConfigAttributes.size());
4547
}
4648

4749
@Override
48-
public void removeResource(Resource resource) {
50+
public synchronizedvoid removeResource(Resource resource) {
4951
resourceConfigAttributes.remove(this.newMvcRequestMatcher(resource.getUrl(), resource.getMethod()));
50-
log.info("resourceConfigAttributes size:{}", this.resourceConfigAttributes.size());
52+
log.info("resourceConfigAttributes size:{}", resourceConfigAttributes.size());
5153
}
5254

5355
@Override
54-
public Map<RequestMatcher, ConfigAttribute> loadResource() {
55-
Set<Resource> resources = resourceProvider.resources().getData();
56-
this.resourceConfigAttributes = resources.stream()
56+
public synchronized void loadResource() {
57+
Result<Set<Resource>> resourcesResult = resourceProvider.resources();
58+
if (resourcesResult.isFail()) {
59+
System.exit(1);
60+
}
61+
Set<Resource> resources = resourcesResult.getData();
62+
Map<MvcRequestMatcher, SecurityConfig> tempResourceConfigAttributes = resources.stream()
5763
.collect(Collectors.toMap(
5864
resource -> this.newMvcRequestMatcher(resource.getUrl(), resource.getMethod()),
5965
resource -> new SecurityConfig(resource.getCode())
6066
));
61-
log.debug("init resourceConfigAttributes:{}", this.resourceConfigAttributes);
62-
returnthis.resourceConfigAttributes;
67+
resourceConfigAttributes.putAll(tempResourceConfigAttributes);
68+
log.debug("init resourceConfigAttributes:{}", resourceConfigAttributes);
6369
}
6470

6571
@Override
6672
public ConfigAttribute findConfigAttributesByUrl(HttpServletRequest authRequest) {
67-
return this.resourceConfigAttributes.keySet().stream()
73+
return resourceConfigAttributes.keySet().stream()
6874
.filter(requestMatcher -> requestMatcher.matches(authRequest))
69-
.map(requestMatcher -> this.resourceConfigAttributes.get(requestMatcher))
75+
.map(requestMatcher -> resourceConfigAttributes.get(requestMatcher))
7076
.peek(urlConfigAttribute -> log.debug("url在资源池中配置:{}", urlConfigAttribute.getAttribute()))
7177
.findFirst()
7278
.orElse(new SecurityConfig("NONEXISTENT_URL"));

0 commit comments

Comments
(0)

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