diff --git a/adc-da-base/src/main/java/com/adc/da/xss/SQLFilter.java b/adc-da-base/src/main/java/com/adc/da/xss/SQLFilter.java index 60584f33..1a0a5d41 100644 --- a/adc-da-base/src/main/java/com/adc/da/xss/SQLFilter.java +++ b/adc-da-base/src/main/java/com/adc/da/xss/SQLFilter.java @@ -19,7 +19,7 @@ public class SQLFilter { for(int i$ = 0; i$ < len$; ++i$) { String keyword = arr$[i$]; - if (checkStr.indexOf(keyword) != -1) { + if (checkStr.indexOf(keyword) != -1 && checkStr.indexOf("selectindex") == -1 && checkStr.indexOf("selectvalue") == -1) { throw new AdcDaBaseException("包含非法字符"); } } diff --git a/adc-da-search/src/main/java/com/adc/da/search/service/impl/SearchCenterServiceImpl.java b/adc-da-search/src/main/java/com/adc/da/search/service/impl/SearchCenterServiceImpl.java index 2e100440..6c6ad06d 100644 --- a/adc-da-search/src/main/java/com/adc/da/search/service/impl/SearchCenterServiceImpl.java +++ b/adc-da-search/src/main/java/com/adc/da/search/service/impl/SearchCenterServiceImpl.java @@ -3,13 +3,14 @@ package com.adc.da.search.service.impl; import com.adc.da.search.entity.*; import com.adc.da.search.service.SearchCenterService; import com.adc.da.search.util.InitStandAttrSearchUtil; +import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; -import net.sf.json.JSONObject; import org.apache.commons.lang3.StringUtils; import org.elasticsearch.action.search.SearchRequestBuilder; import org.elasticsearch.action.search.SearchResponse; import org.elasticsearch.action.search.SearchType; import org.elasticsearch.client.transport.TransportClient; +import org.elasticsearch.common.collect.HppcMaps; import org.elasticsearch.common.text.Text; import org.elasticsearch.index.query.BoolQueryBuilder; import org.elasticsearch.index.query.QueryBuilder; @@ -22,6 +23,7 @@ import org.elasticsearch.search.aggregations.bucket.terms.StringTerms; import org.elasticsearch.search.aggregations.bucket.terms.TermsAggregationBuilder; import org.elasticsearch.search.fetch.subphase.highlight.HighlightBuilder; import org.elasticsearch.search.fetch.subphase.highlight.HighlightField; +import org.json.JSONTokener; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @@ -145,10 +147,10 @@ public class SearchCenterServiceImpl implements SearchCenterService { private BoolQueryBuilder querySeniorMsg(SeniorSearchInfoEO searchInfoEO, BoolQueryBuilder boolQueryBuilder) { BoolQueryBuilder boolQueryBuilderMust = new BoolQueryBuilder(); String sarStandAttrEOStr = searchInfoEO.getSarStandAttrEOStr(); - Map sarStandAttrMap = JSONObject.fromObject(sarStandAttrEOStr); + Map sarStandAttrMap = net.sf.json.JSONObject.fromObject(sarStandAttrEOStr); // MAP通过JAVA8新特性流过滤NULL值或对象 - Map collectAttrMap = sarStandAttrMap.entrySet().stream().filter((e) -> e.getValue() != null).collect(Collectors.toMap( + Map collectAttrMap = sarStandAttrMap.entrySet().stream().filter((e) -> e.getValue() != null && StringUtils.isNotBlank(e.getValue().toString())).collect(Collectors.toMap( Map.Entry::getKey, Map.Entry::getValue)); @@ -157,8 +159,20 @@ public class SearchCenterServiceImpl implements SearchCenterService { // 动态存储属性字段 ---1 for (String field : fieldInfoList) { - if(collectAttrMap.containsKey(field)){ - boolQueryBuilderMust.must(QueryBuilders.fuzzyQuery(field, "*"+collectAttrMap.get(field)+"*")); + if(collectAttrMap.containsKey(field.toLowerCase())){ + System.out.println(collectAttrMap.get(field.toLowerCase())+"----------------------------"); + List fields = new ArrayList<>(); + Object json= new JSONTokener(collectAttrMap.get(field.toLowerCase()).toString()).nextValue(); + if(json instanceof org.json.JSONArray){ + fields = JSONObject.parseArray(collectAttrMap.get(field.toLowerCase()).toString(),String.class); + }else { + fields.add(collectAttrMap.get(field.toLowerCase()).toString()); + } + if(!fields.isEmpty()){ + for (String str : fields) { + boolQueryBuilderMust.must(QueryBuilders.fuzzyQuery(field, "*"+str+"*")); + } + } } }