使用SpringBoot請求參數過濾空格
SpringBoot請求參數過濾空格
1、參數修改SpaceHttpServletRequestWrapper
public class SpaceHttpServletRequestWrapper extends HttpServletRequestWrapper { public SpaceHttpServletRequestWrapper(HttpServletRequest servletRequest) { super(servletRequest); } @Override public String[] getParameterValues(String parameter) { String[] values = super.getParameterValues(parameter); if (values == null) { return new String[0]; } int count = values.length; String[] encodedValues = new String[count]; for (int i = 0; i < count; i++) { encodedValues[i] = values[i].trim(); } return encodedValues; } @Override public String getParameter(String parameter) { String value = super.getParameter(parameter); if (value == null) { return null; } return value.trim(); } }
2、空格過濾器
public class SpaceFilter implements Filter { private FilterConfig filterConfig; @Override public void init(FilterConfig filterConfig) throws ServletException { this.filterConfig = filterConfig; } @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { filterChain.doFilter(new SpaceHttpServletRequestWrapper( (HttpServletRequest) servletRequest), servletResponse); } @Override public void destroy() { this.filterConfig = null; } }
3、過濾器初始化
@Configuration public class WebMvcConfiguration implements WebMvcConfigurer { @Bean public FilterRegistrationBean spaceFilter() { FilterRegistrationBean fitler = new FilterRegistrationBean(); fitler.setFilter(new SpaceFilter()); fitler.addUrlPatterns("/*"); fitler.setName("SpaceFilter"); fitler.setDispatcherTypes(DispatcherType.REQUEST); return fitler; } }
SpringBoot指定執行參數,參數值包含空格問題
SpringBoot啟動參數可以通過 –key1=value1 這樣設置,如下:
java -jar xx.jar --server.port=9301
但是對於有空格的參數,比如 sync.email.cron=0 0 9 * * ?,如何設置?
- 我的環境:windows
方式一(錯誤):
java -jar xx.jar --sync.email.cron=0 0 9 * * ?
方式二(錯誤):
set mailCron=0 0 9 * * ? java -jar xx.jar --sync.email.cron=%mailCron%
方式三(錯誤):
set mailCron=`0 0 9 * * ?` java -jar xx.jar --sync.email.cron=%mailCron%
等同於
java -jar xx.jar --sync.email.cron=`0 0 9 * * ?`
方式四(錯誤):
set mailCron='0 0 9 * * ?' java -jar xx.jar --sync.email.cron=%mailCron%
等同於
java -jar xx.jar --sync.email.cron='0 0 9 * * ?'
方式五(正確):
set mailCron="0 0 9 * * ?" java -jar xx.jar --sync.email.cron=%mailCron%
等同於
java -jar xx.jar --sync.email.cron="0 0 9 * * ?"
如上,正確的方式隻有想辦法將帶有空格的字符串用雙引號包起來,而直接設置、反引號設置、單引號設置都會將字符串分割開來,都是不正確的。Linux下也同樣適用。
以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。
推薦閱讀:
- 使用Springboot自定義轉換器實現參數去空格功能
- Springboot @WebFilter無法註入其他Bean的示例問題
- 詳解如何在SpringBoot中自定義參數解析器
- Java中使用Filter過濾器的方法
- Java解決前端數據處理及亂碼問題