Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
T
traffic-signal-platform
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
signal
traffic-signal-platform
Commits
cde071e5
Commit
cde071e5
authored
Jun 12, 2023
by
duanruiming
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Revert "[update] 解决包问题"
This reverts commit
735ebc30
.
parent
735ebc30
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
142 additions
and
130 deletions
+142
-130
ResourceServerConfig.java
.../main/java/net/wanji/web/config/ResourceServerConfig.java
+114
-114
Swagger2.java
...-service/src/main/java/net/wanji/web/config/Swagger2.java
+28
-16
No files found.
signal-control-service/src/main/java/net/wanji/web/config/ResourceServerConfig.java
View file @
cde071e5
//
package net.wanji.web.config;
//
//
import com.wanji.identity.auth.IdentityResourceServerConfig;
//
import lombok.extern.slf4j.Slf4j;
//
import net.wanji.common.framework.rest.HeaderMapRequestWrapper;
//
import net.wanji.common.utils.cache.IgniteClientCacheUtil;
//
import net.wanji.common.utils.cookie.CookieUtil;
//
import org.apache.commons.lang3.StringUtils;
//
import org.springframework.context.annotation.Configuration;
//
import org.springframework.http.HttpHeaders;
//
import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity;
//
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
//
import org.springframework.security.oauth2.common.OAuth2AccessToken;
//
import org.springframework.security.oauth2.config.annotation.web.configuration.EnableResourceServer;
//
import org.springframework.security.web.context.SecurityContextPersistenceFilter;
//
import org.springframework.web.filter.OncePerRequestFilter;
//
//
import javax.servlet.FilterChain;
//
import javax.servlet.ServletException;
//
import javax.servlet.http.HttpServletRequest;
//
import javax.servlet.http.HttpServletResponse;
//
import java.io.IOException;
//
import java.util.ArrayList;
//
import java.util.List;
//
//
import static net.wanji.common.framework.Constants.Cache.LOGIN_CACHE;
//
/
//
**
//
* @Description: 资源服务器配置
//
* @Author
//
* @Date 2020/4/12 21:01
//
*/
//
@Configuration
//
@EnableResourceServer
//
@EnableGlobalMethodSecurity(prePostEnabled = true)
//
@Slf4j
//
public class ResourceServerConfig extends IdentityResourceServerConfig {
//
//
@Override
//
public void configure(HttpSecurity http) throws Exception {
//
//
//
放开全部
//
http.authorizeRequests()
//
.antMatchers(whiteList.toArray(new String[whiteList.size()])).permitAll()
//
.anyRequest().authenticated()
//
.and().cors()
//
.and().csrf().disable()
//
.addFilterBefore(new OncePerRequestFilter() {
//
@Override
//
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {
//
String breakerToken = " ";
//
// 判断header里有没有authorization,有则赋值给breakertoken,没有则根据tokenid
//
if (!StringUtils.isEmpty(request.getHeader(HttpHeaders.AUTHORIZATION))) {
//
breakerToken = request.getHeader(HttpHeaders.AUTHORIZATION);
//
} else {
//
String tokenId = "";
//
// 移动端的tokenid在请求头里,pc端的在cookie里
//
String mobileTokenId = request.getHeader("tokenId");
//
if (!StringUtils.isEmpty(mobileTokenId)) {
//
tokenId = mobileTokenId;
//
} else {
//
tokenId = CookieUtil.getUid(request, "tokenId");
//
}
//
if (!StringUtils.isEmpty(tokenId)) {
//
try {
//
//
OAuth2AccessToken oAuth2AccessToken = (OAuth2AccessToken) IgniteClientCacheUtil.getValue(LOGIN_CACHE, tokenId);
//
breakerToken = oAuth2AccessToken.getTokenType() + " " + oAuth2AccessToken.getValue();
//
} catch (Exception e) {
//
e.printStackTrace();
//
}
//
}
//
}
//
HeaderMapRequestWrapper requestWrapper = new HeaderMapRequestWrapper(request);
//
if (!StringUtils.isEmpty(breakerToken)) {
//
//将cookie中的token放到header,供oauth鉴权使用
//
requestWrapper.addHeader(HttpHeaders.AUTHORIZATION, breakerToken);
//
}
//
try {
//
filterChain.doFilter(requestWrapper, response);
//
} catch (Exception e) {
//
log.error("配置信息错误:{}", e);
//
}
//
}
//
}, SecurityContextPersistenceFilter.class);
//
}
//
//
//访问白名单
//
private static final List<String> whiteList = new ArrayList<String>() {{
//
//swagger
//
add("/webjars/**");
//
add("/resources/**");
//
add("/swagger-ui.html");
//
add("/swagger-resources/**");
//
add("/v2/api-docs");
//
add("/getSwaggerToken");
//
add("/");
//
add("/**/*.html");
//
add("/**/*.htm");
//
add("/**/*.woff");
//
add("/**/*.woff2");
//
add("/**/*.ttf");
//
add("/**/*.svg");
//
add("/**/*.css");
//
add("/**/*.png");
//
add("/**/*.jpg");
//
add("/**/*.gif");
//
add("/**/*.ico");
//
add("/**/*.json");
//
add("/**/*.js");
//
add("/**/*.txt");
//
add("/**");
//
}};
//
}
package
net
.
wanji
.
web
.
config
;
import
com.wanji.identity.auth.IdentityResourceServerConfig
;
import
lombok.extern.slf4j.Slf4j
;
import
net.wanji.common.framework.rest.HeaderMapRequestWrapper
;
import
net.wanji.common.utils.cache.IgniteClientCacheUtil
;
import
net.wanji.common.utils.cookie.CookieUtil
;
import
org.apache.commons.lang3.StringUtils
;
import
org.springframework.context.annotation.Configuration
;
import
org.springframework.http.HttpHeaders
;
import
org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity
;
import
org.springframework.security.config.annotation.web.builders.HttpSecurity
;
import
org.springframework.security.oauth2.common.OAuth2AccessToken
;
import
org.springframework.security.oauth2.config.annotation.web.configuration.EnableResourceServer
;
import
org.springframework.security.web.context.SecurityContextPersistenceFilter
;
import
org.springframework.web.filter.OncePerRequestFilter
;
import
javax.servlet.FilterChain
;
import
javax.servlet.ServletException
;
import
javax.servlet.http.HttpServletRequest
;
import
javax.servlet.http.HttpServletResponse
;
import
java.io.IOException
;
import
java.util.ArrayList
;
import
java.util.List
;
import
static
net
.
wanji
.
common
.
framework
.
Constants
.
Cache
.
LOGIN_CACHE
;
/**
* @Description: 资源服务器配置
* @Author
* @Date 2020/4/12 21:01
*/
@Configuration
@EnableResourceServer
@EnableGlobalMethodSecurity
(
prePostEnabled
=
true
)
@Slf4j
public
class
ResourceServerConfig
extends
IdentityResourceServerConfig
{
@Override
public
void
configure
(
HttpSecurity
http
)
throws
Exception
{
// 放开全部
http
.
authorizeRequests
()
.
antMatchers
(
whiteList
.
toArray
(
new
String
[
whiteList
.
size
()])).
permitAll
()
.
anyRequest
().
authenticated
()
.
and
().
cors
()
.
and
().
csrf
().
disable
()
.
addFilterBefore
(
new
OncePerRequestFilter
()
{
@Override
protected
void
doFilterInternal
(
HttpServletRequest
request
,
HttpServletResponse
response
,
FilterChain
filterChain
)
throws
ServletException
,
IOException
{
String
breakerToken
=
" "
;
// 判断header里有没有authorization,有则赋值给breakertoken,没有则根据tokenid
if
(!
StringUtils
.
isEmpty
(
request
.
getHeader
(
HttpHeaders
.
AUTHORIZATION
)))
{
breakerToken
=
request
.
getHeader
(
HttpHeaders
.
AUTHORIZATION
);
}
else
{
String
tokenId
=
""
;
// 移动端的tokenid在请求头里,pc端的在cookie里
String
mobileTokenId
=
request
.
getHeader
(
"tokenId"
);
if
(!
StringUtils
.
isEmpty
(
mobileTokenId
))
{
tokenId
=
mobileTokenId
;
}
else
{
tokenId
=
CookieUtil
.
getUid
(
request
,
"tokenId"
);
}
if
(!
StringUtils
.
isEmpty
(
tokenId
))
{
try
{
OAuth2AccessToken
oAuth2AccessToken
=
(
OAuth2AccessToken
)
IgniteClientCacheUtil
.
getValue
(
LOGIN_CACHE
,
tokenId
);
breakerToken
=
oAuth2AccessToken
.
getTokenType
()
+
" "
+
oAuth2AccessToken
.
getValue
();
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
}
}
}
HeaderMapRequestWrapper
requestWrapper
=
new
HeaderMapRequestWrapper
(
request
);
if
(!
StringUtils
.
isEmpty
(
breakerToken
))
{
//将cookie中的token放到header,供oauth鉴权使用
requestWrapper
.
addHeader
(
HttpHeaders
.
AUTHORIZATION
,
breakerToken
);
}
try
{
filterChain
.
doFilter
(
requestWrapper
,
response
);
}
catch
(
Exception
e
)
{
log
.
error
(
"配置信息错误:{}"
,
e
);
}
}
},
SecurityContextPersistenceFilter
.
class
);
}
//访问白名单
private
static
final
List
<
String
>
whiteList
=
new
ArrayList
<
String
>()
{{
//swagger
add
(
"/webjars/**"
);
add
(
"/resources/**"
);
add
(
"/swagger-ui.html"
);
add
(
"/swagger-resources/**"
);
add
(
"/v2/api-docs"
);
add
(
"/getSwaggerToken"
);
add
(
"/"
);
add
(
"/**/*.html"
);
add
(
"/**/*.htm"
);
add
(
"/**/*.woff"
);
add
(
"/**/*.woff2"
);
add
(
"/**/*.ttf"
);
add
(
"/**/*.svg"
);
add
(
"/**/*.css"
);
add
(
"/**/*.png"
);
add
(
"/**/*.jpg"
);
add
(
"/**/*.gif"
);
add
(
"/**/*.ico"
);
add
(
"/**/*.json"
);
add
(
"/**/*.js"
);
add
(
"/**/*.txt"
);
add
(
"/**"
);
}};
}
signal-control-service/src/main/java/net/wanji/web/config/Swagger2.java
View file @
cde071e5
...
...
@@ -2,10 +2,20 @@ package net.wanji.web.config;
import
org.springframework.beans.BeansException
;
import
org.springframework.beans.factory.config.BeanPostProcessor
;
import
org.springframework.boot.actuate.autoconfigure.endpoint.web.CorsEndpointProperties
;
import
org.springframework.boot.actuate.autoconfigure.endpoint.web.WebEndpointProperties
;
import
org.springframework.boot.actuate.autoconfigure.web.server.ManagementPortType
;
import
org.springframework.boot.actuate.endpoint.ExposableEndpoint
;
import
org.springframework.boot.actuate.endpoint.web.*
;
import
org.springframework.boot.actuate.endpoint.web.annotation.ControllerEndpointsSupplier
;
import
org.springframework.boot.actuate.endpoint.web.annotation.ServletEndpointsSupplier
;
import
org.springframework.boot.actuate.endpoint.web.servlet.WebMvcEndpointHandlerMapping
;
import
org.springframework.boot.autoconfigure.web.reactive.WebFluxAutoConfiguration
;
import
org.springframework.context.annotation.Bean
;
import
org.springframework.context.annotation.Configuration
;
import
org.springframework.core.env.Environment
;
import
org.springframework.util.ReflectionUtils
;
import
org.springframework.util.StringUtils
;
import
springfox.documentation.builders.ApiInfoBuilder
;
import
springfox.documentation.builders.PathSelectors
;
import
springfox.documentation.builders.RequestHandlerSelectors
;
...
...
@@ -17,6 +27,8 @@ import springfox.documentation.spring.web.plugins.WebMvcRequestHandlerProvider;
import
springfox.documentation.swagger2.annotations.EnableSwagger2
;
import
java.lang.reflect.Field
;
import
java.util.ArrayList
;
import
java.util.Collection
;
import
java.util.List
;
import
java.util.stream.Collectors
;
...
...
@@ -49,22 +61,22 @@ public class Swagger2 {
.
build
();
}
//
@Bean
//
public WebMvcEndpointHandlerMapping webEndpointServletHandlerMapping(WebEndpointsSupplier webEndpointsSupplier, ServletEndpointsSupplier servletEndpointsSupplier, ControllerEndpointsSupplier controllerEndpointsSupplier, EndpointMediaTypes endpointMediaTypes, CorsEndpointProperties corsProperties, WebEndpointProperties webEndpointProperties, Environment environment) {
//
List<ExposableEndpoint<?>> allEndpoints = new ArrayList();
//
Collection<ExposableWebEndpoint> webEndpoints = webEndpointsSupplier.getEndpoints();
//
allEndpoints.addAll(webEndpoints);
//
allEndpoints.addAll(servletEndpointsSupplier.getEndpoints());
//
allEndpoints.addAll(controllerEndpointsSupplier.getEndpoints());
//
String basePath = webEndpointProperties.getBasePath();
//
EndpointMapping endpointMapping = new EndpointMapping(basePath);
//
boolean shouldRegisterLinksMapping = this.shouldRegisterLinksMapping(webEndpointProperties, environment, basePath);
//
return new WebMvcEndpointHandlerMapping(endpointMapping, webEndpoints, endpointMediaTypes, corsProperties.toCorsConfiguration(), new EndpointLinksResolver(allEndpoints, basePath), shouldRegisterLinksMapping, null);
//
}
//
//
private boolean shouldRegisterLinksMapping(WebEndpointProperties webEndpointProperties, Environment environment, String basePath) {
//
return webEndpointProperties.getDiscovery().isEnabled() && (StringUtils.hasText(basePath) || ManagementPortType.get(environment).equals(ManagementPortType.DIFFERENT));
//
}
@Bean
public
WebMvcEndpointHandlerMapping
webEndpointServletHandlerMapping
(
WebEndpointsSupplier
webEndpointsSupplier
,
ServletEndpointsSupplier
servletEndpointsSupplier
,
ControllerEndpointsSupplier
controllerEndpointsSupplier
,
EndpointMediaTypes
endpointMediaTypes
,
CorsEndpointProperties
corsProperties
,
WebEndpointProperties
webEndpointProperties
,
Environment
environment
)
{
List
<
ExposableEndpoint
<?>>
allEndpoints
=
new
ArrayList
();
Collection
<
ExposableWebEndpoint
>
webEndpoints
=
webEndpointsSupplier
.
getEndpoints
();
allEndpoints
.
addAll
(
webEndpoints
);
allEndpoints
.
addAll
(
servletEndpointsSupplier
.
getEndpoints
());
allEndpoints
.
addAll
(
controllerEndpointsSupplier
.
getEndpoints
());
String
basePath
=
webEndpointProperties
.
getBasePath
();
EndpointMapping
endpointMapping
=
new
EndpointMapping
(
basePath
);
boolean
shouldRegisterLinksMapping
=
this
.
shouldRegisterLinksMapping
(
webEndpointProperties
,
environment
,
basePath
);
return
new
WebMvcEndpointHandlerMapping
(
endpointMapping
,
webEndpoints
,
endpointMediaTypes
,
corsProperties
.
toCorsConfiguration
(),
new
EndpointLinksResolver
(
allEndpoints
,
basePath
),
shouldRegisterLinksMapping
,
null
);
}
private
boolean
shouldRegisterLinksMapping
(
WebEndpointProperties
webEndpointProperties
,
Environment
environment
,
String
basePath
)
{
return
webEndpointProperties
.
getDiscovery
().
isEnabled
()
&&
(
StringUtils
.
hasText
(
basePath
)
||
ManagementPortType
.
get
(
environment
).
equals
(
ManagementPortType
.
DIFFERENT
));
}
@Bean
public
static
BeanPostProcessor
springfoxHandlerProviderBeanPostProcessor
()
{
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment