springboot url 特殊字符

转载网址:get请求参数特殊字符问题

springboot版本: 2.5.3
get 请求: 127.0.0.1:9999/hadoop01/hdfsController/urlCopy?localFile=D:\suzhou\study\houduan\hadoop\hadoop\file&hFile=hdfs://node01:8020/a.txt
出现了 java.lang.IllegalArgumentException: Invalid character found in the request target [/hadoop01/hdfsController/urlCopy?localFile=D:\suzhou\study\houduan\hadoop\hadoop\file&hFile=hdfs://node01:8020/a.txt ]. The valid characters are defined in RFC 7230 and RFC 3986
解决办法是,在springboot启动中添加一下代码

 @Bean
    public ConfigurableServletWebServerFactory webServerFactory() {
        TomcatServletWebServerFactory factory = new TomcatServletWebServerFactory();
        factory.addConnectorCustomizers((TomcatConnectorCustomizer) connector -> connector.setProperty("relaxedQueryChars", "|{}[]\\"));
        return factory;
    }

可以使用过滤器(Filter)来过滤特殊字符,具体实现可以参考以下步骤: 1. 创建一个实现了javax.servlet.Filter接口的类,重写doFilter方法,在该方法中对请求参数进行过滤处理。 2. 在springboot的配置类中,使用@Bean注解将该过滤器注册到spring容器中。 3. 在web.xml中配置该过滤器的拦截路径。 具体实现可以参考以下代码: ``` @Component public class SpecialCharacterFilter implements Filter { @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { HttpServletRequest req = (HttpServletRequest) request; String param = req.getParameter("param"); if (StringUtils.isNotBlank(param)) { String filteredParam = filterSpecialCharacter(param); req.setAttribute("param", filteredParam); } chain.doFilter(request, response); } private String filterSpecialCharacter(String str) { // 过滤特殊字符的逻辑 return str; } } @Configuration public class WebConfig { @Bean public FilterRegistrationBean<SpecialCharacterFilter> specialCharacterFilter() { FilterRegistrationBean<SpecialCharacterFilter> registrationBean = new FilterRegistrationBean<>(); registrationBean.setFilter(new SpecialCharacterFilter()); registrationBean.addUrlPatterns("/*"); registrationBean.setName("specialCharacterFilter"); registrationBean.setOrder(1); return registrationBean; } } <filter> <filter-name>specialCharacterFilter</filter-name> <filter-class>com.example.SpecialCharacterFilter</filter-class> </filter> <filter-mapping> <filter-name>specialCharacterFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值