|
@@ -1,11 +1,12 @@
|
|
|
package cn.iocoder.dashboard.framework.web.config;
|
|
|
|
|
|
+import cn.iocoder.dashboard.framework.web.core.enums.FilterOrderEnum;
|
|
|
import cn.iocoder.dashboard.framework.web.core.filter.RequestBodyCacheFilter;
|
|
|
import cn.iocoder.dashboard.framework.web.core.filter.XssFilter;
|
|
|
import org.springframework.boot.context.properties.EnableConfigurationProperties;
|
|
|
+import org.springframework.boot.web.servlet.FilterRegistrationBean;
|
|
|
import org.springframework.context.annotation.Bean;
|
|
|
import org.springframework.context.annotation.Configuration;
|
|
|
-import org.springframework.core.annotation.Order;
|
|
|
import org.springframework.util.PathMatcher;
|
|
|
import org.springframework.web.bind.annotation.RestController;
|
|
|
import org.springframework.web.cors.CorsConfiguration;
|
|
@@ -15,10 +16,8 @@ import org.springframework.web.servlet.config.annotation.PathMatchConfigurer;
|
|
|
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
|
|
|
|
|
|
import javax.annotation.Resource;
|
|
|
+import javax.servlet.Filter;
|
|
|
|
|
|
-/**
|
|
|
- * Web 配置类
|
|
|
- */
|
|
|
@Configuration
|
|
|
@EnableConfigurationProperties({WebProperties.class, XssProperties.class})
|
|
|
public class WebConfiguration implements WebMvcConfigurer {
|
|
@@ -39,8 +38,7 @@ public class WebConfiguration implements WebMvcConfigurer {
|
|
|
* 创建 CorsFilter Bean,解决跨域问题
|
|
|
*/
|
|
|
@Bean
|
|
|
- @Order(Integer.MIN_VALUE)
|
|
|
- public CorsFilter corsFilter() {
|
|
|
+ public FilterRegistrationBean<CorsFilter> corsFilterBean() {
|
|
|
// 创建 CorsConfiguration 对象
|
|
|
CorsConfiguration config = new CorsConfiguration();
|
|
|
config.setAllowCredentials(true);
|
|
@@ -50,25 +48,29 @@ public class WebConfiguration implements WebMvcConfigurer {
|
|
|
// 创建 UrlBasedCorsConfigurationSource 对象
|
|
|
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
|
|
|
source.registerCorsConfiguration("/**", config); // 对接口配置跨域设置
|
|
|
- return new CorsFilter(source);
|
|
|
+ return createFilterBean(new CorsFilter(source), FilterOrderEnum.CORS_FILTER);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 创建 RequestBodyCacheFilter Bean,可重复读取请求内容
|
|
|
*/
|
|
|
@Bean
|
|
|
- @Order(Integer.MIN_VALUE)
|
|
|
- public RequestBodyCacheFilter requestBodyCacheFilter() {
|
|
|
- return new RequestBodyCacheFilter();
|
|
|
+ public FilterRegistrationBean<RequestBodyCacheFilter> requestBodyCacheFilter() {
|
|
|
+ return createFilterBean(new RequestBodyCacheFilter(), FilterOrderEnum.REQUEST_BODY_CACHE_FILTER);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 创建 XssFilter Bean,解决 Xss 安全问题
|
|
|
*/
|
|
|
@Bean
|
|
|
- @Order(Integer.MIN_VALUE + 1000) // 需要保证在 RequestBodyCacheFilter 后面
|
|
|
- public XssFilter xssFilter(XssProperties properties, PathMatcher pathMatcher) {
|
|
|
- return new XssFilter(properties, pathMatcher);
|
|
|
+ public FilterRegistrationBean<XssFilter> xssFilter(XssProperties properties, PathMatcher pathMatcher) {
|
|
|
+ return createFilterBean(new XssFilter(properties, pathMatcher), FilterOrderEnum.XSS_FILTER);
|
|
|
+ }
|
|
|
+
|
|
|
+ private static <T extends Filter> FilterRegistrationBean<T> createFilterBean(T filter, Integer order) {
|
|
|
+ FilterRegistrationBean<T> bean = new FilterRegistrationBean<>(filter);
|
|
|
+ bean.setOrder(order);
|
|
|
+ return bean;
|
|
|
}
|
|
|
|
|
|
}
|