Merge branch 'master-jdk21' of https://gitee.com/zhijiantianya/ruoyi-vue-pro
This commit is contained in:
commit
3b7a1b55b9
@ -50,7 +50,7 @@ services:
|
|||||||
--spring.datasource.dynamic.datasource.slave.url=${SLAVE_DATASOURCE_URL:-jdbc:mysql://yudao-mysql:3306/ruoyi-vue-pro?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true}
|
--spring.datasource.dynamic.datasource.slave.url=${SLAVE_DATASOURCE_URL:-jdbc:mysql://yudao-mysql:3306/ruoyi-vue-pro?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true}
|
||||||
--spring.datasource.dynamic.datasource.slave.username=${SLAVE_DATASOURCE_USERNAME:-root}
|
--spring.datasource.dynamic.datasource.slave.username=${SLAVE_DATASOURCE_USERNAME:-root}
|
||||||
--spring.datasource.dynamic.datasource.slave.password=${SLAVE_DATASOURCE_PASSWORD:-123456}
|
--spring.datasource.dynamic.datasource.slave.password=${SLAVE_DATASOURCE_PASSWORD:-123456}
|
||||||
--spring.redis.host=${REDIS_HOST:-yudao-redis}
|
--spring.data.redis.host=${REDIS_HOST:-yudao-redis}
|
||||||
depends_on:
|
depends_on:
|
||||||
- mysql
|
- mysql
|
||||||
- redis
|
- redis
|
||||||
|
@ -44,9 +44,11 @@ public class YudaoXssAutoConfiguration implements WebMvcConfigurer {
|
|||||||
@ConditionalOnMissingBean(name = "xssJacksonCustomizer")
|
@ConditionalOnMissingBean(name = "xssJacksonCustomizer")
|
||||||
@ConditionalOnBean(ObjectMapper.class)
|
@ConditionalOnBean(ObjectMapper.class)
|
||||||
@ConditionalOnProperty(value = "yudao.xss.enable", havingValue = "true")
|
@ConditionalOnProperty(value = "yudao.xss.enable", havingValue = "true")
|
||||||
public Jackson2ObjectMapperBuilderCustomizer xssJacksonCustomizer(XssCleaner xssCleaner) {
|
public Jackson2ObjectMapperBuilderCustomizer xssJacksonCustomizer(XssProperties properties,
|
||||||
|
PathMatcher pathMatcher,
|
||||||
|
XssCleaner xssCleaner) {
|
||||||
// 在反序列化时进行 xss 过滤,可以替换使用 XssStringJsonSerializer,在序列化时进行处理
|
// 在反序列化时进行 xss 过滤,可以替换使用 XssStringJsonSerializer,在序列化时进行处理
|
||||||
return builder -> builder.deserializerByType(String.class, new XssStringJsonDeserializer(xssCleaner));
|
return builder -> builder.deserializerByType(String.class, new XssStringJsonDeserializer(properties, pathMatcher, xssCleaner));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1,12 +1,16 @@
|
|||||||
package cn.iocoder.yudao.framework.xss.core.json;
|
package cn.iocoder.yudao.framework.xss.core.json;
|
||||||
|
|
||||||
|
import cn.iocoder.yudao.framework.common.util.servlet.ServletUtils;
|
||||||
|
import cn.iocoder.yudao.framework.xss.config.XssProperties;
|
||||||
import cn.iocoder.yudao.framework.xss.core.clean.XssCleaner;
|
import cn.iocoder.yudao.framework.xss.core.clean.XssCleaner;
|
||||||
import com.fasterxml.jackson.core.JsonParser;
|
import com.fasterxml.jackson.core.JsonParser;
|
||||||
import com.fasterxml.jackson.core.JsonToken;
|
import com.fasterxml.jackson.core.JsonToken;
|
||||||
import com.fasterxml.jackson.databind.DeserializationContext;
|
import com.fasterxml.jackson.databind.DeserializationContext;
|
||||||
import com.fasterxml.jackson.databind.deser.std.StringDeserializer;
|
import com.fasterxml.jackson.databind.deser.std.StringDeserializer;
|
||||||
|
import jakarta.servlet.http.HttpServletRequest;
|
||||||
import lombok.AllArgsConstructor;
|
import lombok.AllArgsConstructor;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.springframework.util.PathMatcher;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
|
||||||
@ -20,10 +24,29 @@ import java.io.IOException;
|
|||||||
@AllArgsConstructor
|
@AllArgsConstructor
|
||||||
public class XssStringJsonDeserializer extends StringDeserializer {
|
public class XssStringJsonDeserializer extends StringDeserializer {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 属性
|
||||||
|
*/
|
||||||
|
private final XssProperties properties;
|
||||||
|
/**
|
||||||
|
* 路径匹配器
|
||||||
|
*/
|
||||||
|
private final PathMatcher pathMatcher;
|
||||||
|
|
||||||
private final XssCleaner xssCleaner;
|
private final XssCleaner xssCleaner;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String deserialize(JsonParser p, DeserializationContext ctxt) throws IOException {
|
public String deserialize(JsonParser p, DeserializationContext ctxt) throws IOException {
|
||||||
|
// 1. 白名单 URL 的处理
|
||||||
|
HttpServletRequest request = ServletUtils.getRequest();
|
||||||
|
if (request != null) {
|
||||||
|
String uri = ServletUtils.getRequest().getRequestURI();
|
||||||
|
if (properties.getExcludeUrls().stream().anyMatch(excludeUrl -> pathMatcher.match(excludeUrl, uri))) {
|
||||||
|
return p.getText();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 2. 真正使用 xssCleaner 进行过滤
|
||||||
if (p.hasToken(JsonToken.VALUE_STRING)) {
|
if (p.hasToken(JsonToken.VALUE_STRING)) {
|
||||||
return xssCleaner.clean(p.getText());
|
return xssCleaner.clean(p.getText());
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user