導航:首頁 > 凈水問答 > webxml過濾特殊字元

webxml過濾特殊字元

發布時間:2024-02-07 11:19:47

① 如何處理XML中的特殊字元

在XML中,有一些符號作為XML 的標記符號,一些特定情況下,屬性值必須帶有這些特殊符號。下面主要是講解一些常用的特殊符號的處理

例一:雙引號的使用。

雙引號作為XML 屬性值的開始結束符號,因此無法在值中直接使用"".處理方式可以分為兩種。

a:屬性值中沒有'(單引號),那麼可以用單引號'' 作為屬性值的開始結束符號

<add key="IPhone" value="apple"/> ...屬性值為("apple").

解決:<add key="IPhone" value=』"apple"『/>

b:屬性值中有'(單引號),也有雙引號。如...屬性值為("'apple").

<add key="IPhone" value="&quot;&apos;apple&quot;"/>

下表為 XML 標記使用的字元列出了五種內置實體。

如果字元可能會使 XML 分析器錯誤地解釋文檔結構,請使用實體,而不要鍵入字元。&apos; 和 &quot; 實體引用最常用在屬性值中。

② 在web.xml中加入過濾

在web.xml中加入過濾器,參考代碼如下:
<filter>
<filter-name>authority</filter-name> //過濾器的名稱,可以自行修改
<filter-class>com.topcheer.filter.AuthorityFilter</filter-class>
<init-param> //初始化的參數
<param-name>NotRequiredAuthorityURL</param-name>
<param-value>/downloadImageControl.action,/initLogin.action,/default.jsp,/logout.jsp,/invalidation.jsp,/login.action,/default.action</param-value>
</init-param> //初始化的參數
<init-param> //初始化的參數
<param-name>invalidURL</param-name> //過濾器要過濾的對象,可自行設置
<param-value>/invalidation.jsp</param-value>
</init-param>
</filter>

<filter-mapping> //過濾器映射
<filter-name>authority</filter-name>
<url-pattern>*.action</url-pattern>
</filter-mapping> //過濾器映射
<filter-mapping> //過濾器映射
<filter-name>authority</filter-name>
<url-pattern>*.jsp</url-pattern>
</filter-mapping>

③ Spring特殊字元處理

在使用Spring或Spring Boot時一些特殊的參數會被轉義,或者因轉義導致出現異常情況,本文匯總總結相關問題及解決方案,幫助大家快速定位和解決問題。

問題一:參數特殊符號被後端轉義

WEB開發時,前端通過get/post方法傳遞參數的時,如果實參附帶特殊符號,後端接收到的值中特殊符號就會被轉義。

例如請求: http://localhost:10001/demo/index?name= 張三(1)

後端接收到的name值中「(」和「)」被轉義。

針對此問題有以下解決方案:

1、檢查web.xml里是否配置了過濾特殊字元的filter,若不需要可以關掉此filter。

2、java中可以使用org.apache.commons.lang包中的public static String unescapeHtml(String str)方法來進行解碼。實踐中嘗試了很多方法沒有解決,最後使用了該方法,將接收到的包含特殊字元的字元串通過該方法進行解碼。

3、在Controller接收的參數前加上@RequestBody註解,示例如下:

@PostMapping(value = "/add")
@ResponseBody
public String addMessage(@RequestBody ParamVo params) {
}
通常情況下,基於RESTful的API經常使用@RequestBody來自動綁定body中的請求參數到實體類對象。使用@RequestBody能解決大多數情況的問題,但某些特殊字元依舊無法正常解決,還需要通過方案二進行補充解決。

使用該中方案進行數據交互時,前度對應的請求需要 聲明dataType和contentType,傳遞的參數並用JSON.stringify()轉為json字元串。

$.ajax({
url: CONTEXTPATH + "/add",
type: 'POST',
dataType: 'JSON',
contentType : 'application/json',
data: JSON.stringify(Data),
success: function (data) {
}
})
問題二:/被轉義成%2F導致400錯誤

前端GET請求url中帶有路徑參數,參數中有/特殊字元,前端已經轉義成了%2F,後端springboot並沒有收到這個請求,直接返回了400的錯誤。

原因:據說是tomcat默認是不支持轉義的,需要手動設置一下轉化,搜索tomcat的設置可以找到,但在springboot中內置的tomcat,在yml中找不到相關的配置。

解決方案:修改啟動類,添加系統參數並重寫WebMvcConfigurerAdapter的configurePathMatch方法。

@SpringBootApplication
public class Application extends WebMvcConfigurerAdapter {
public static void main(String[] args) throws Exception {
System.setProperty("org.apache.tomcat.util.buf.UDecoder.ALLOW_ENCODED_SLASH", "true");
SpringApplication.run(Application.class, args);
}
@Override
public void configurePathMatch(PathMatchConfigurer configurer) {
UrlPathHelper urlPathHelper = new UrlPathHelper();
urlPathHelper.setUrlDecode(false);
configurer.setUrlPathHelper(urlPathHelper);
}
}
其中實現WebMvcConfigurerAdapter介面新版本中改為實現WebMvcConfigurer介面。重寫的方法名稱是一樣的。該部分也可以單獨在WebMvc的配置類中實現,而不是放在啟動類。

當然,設置tomcat的參數是需要寫在main方法當中進行設置的。

問題三:整合jackson的轉義

Spring Boot默認配置json轉換工具就是Jackson, 如果你此時使用的正是Jackson框架,那麼可在配置文件中進行是否轉義的配置,配置項如下:

spring.jackson.date-format=yyyy-MM-dd HH:mm:ss

spring.jackson.serialization.indent_output=true

spring.jackson.serialization.fail_on_empty_beans=false

spring.jackson.defaultPropertyInclusion=NON_EMPTY

spring.jackson.deserialization.fail_on_unknown_properties=false

spring.jackson.parser.allow_unquoted_control_chars=true

spring.jackson.parser.allow_single_quotes=true
其中重點關注allow_unquoted_control_chars項的配置。

當然,相應的配置如果是在配置類中實現的自定義ObjectMapper,可以在自定義時進行設置:

@Configuration
public class JacksonConfig {

}
在類中做過修改中, 配置文件中的配置將不再起作用。

問題四:接收JSON時發生轉義字元綁定對象失敗

在做Spring boot 項目時發生json轉義字元綁定對象失敗,原因是json裡面有些欄位包括空格,反斜杠等,如果框架沒有對這些json進行轉化時,就會報類似如下錯誤
org.codehaus.jackson.JsonParseException: Illegal unquoted character ((CTRL-CHAR, code 9)): has to be escaped using backslash to be included in string value
at [Source: java.io.StringReader@10cfc2e3 ; line: 1, column: 2461]

解決辦法:

1、pom.xml文件增加fastjson依賴。

<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.15</version>
</dependency>
如果項目中已經引入則無需新增該依賴。

2、增加配置類

@SpringBootApplication
public class JsonController extends WebMvcConfigurerAdapter {
@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
super.configureMessageConverters(converters);
FastJsonHttpMessageConverter fastConverter = new FastJsonHttpMessageConverter();
FastJsonConfig fastJsonConfig = new FastJsonConfig();
fastJsonConfig.setSerializerFeatures(
SerializerFeature.PrettyFormat
);
fastConverter.setFastJsonConfig(fastJsonConfig);
converters.add(fastConverter);
}
}
這里的配置方法同問題二中的一樣,新版本Spring Boot 通過WebMvcConfigurer介面來完成。

閱讀全文

與webxml過濾特殊字元相關的資料

熱點內容
水處理裝置報警值大於連鎖值 瀏覽:355
無土栽培水處理如何設計 瀏覽:850
火電廠污水的來源有哪些 瀏覽:439
排出污水對生活有什麼危害 瀏覽:891
淋浴蒸餾茶壺 瀏覽:999
18兆歐超純水是多少電導率 瀏覽:588
氫導交換樹脂變色 瀏覽:438
怎麼挑戰60級純水精靈 瀏覽:547
手碰了污水如何清洗 瀏覽:29
自釀葡萄酒過濾後起霉能煮嗎 瀏覽:337
離子能不能透過超濾膜 瀏覽:503
如何去除噴頭水垢 瀏覽:150
資陽小朋友專屬智能飲水機怎麼樣 瀏覽:297
全樹脂路亞魚竿 瀏覽:70
凈水器裡面的過濾桶怎麼清洗 瀏覽:244
壺膽里都是水垢怎麼清洗 瀏覽:634
哪些污水需要消毒 瀏覽:605
沁園牌反滲透凈水機怎麼安裝 瀏覽:326
日本排核廢水直接侵犯了什麼 瀏覽:79
沁園飲水機出水口不彈出怎麼修理 瀏覽:764