tomcat拦截特殊字符处理 springboot https和http双协议

背景:springboot升级tomcat8.5.5或者更高版本get请求的特殊字符如{}[]|等就会被拦截导致前端参数无法传入到后台,提示400参数错误

处理方案:网上有很多单协议直接配置的处理方案,就是在启动类中配置下面代码

单协议添加 tomcat.addConnectorCustomizers(
                (TomcatConnectorCustomizer) connector -> connector.setProperty("relaxedQueryChars", "|{}[]"));

就完美了,但是多协议网上没有说明再次贴出代码

 

    @Bean
    public ServletWebServerFactory servletContainer() {
        TomcatServletWebServerFactory tomcat = new TomcatServletWebServerFactory() ;
        //默认配置https同时开启http调用下面方法
        tomcat.addAdditionalTomcatConnectors(createStandardConnector());

      //该设置对默认启动的协议有效 本次默认https,http协议通过代码开启同时设置不拦截
        tomcat.addConnectorCustomizers(
                (TomcatConnectorCustomizer) connector -> connector.setProperty("relaxedQueryChars", "|{}[]"));
        return tomcat;
    }

//多协议添加过滤

private Connector createStandardConnector() {
        Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
        connector.setPort(httpPort);

        //通过http的connector设置
        connector.setProperty("relaxedQueryChars", "|{}[]");
        // connector.setSecure(false);
        // connector.setRedirectPort(httpsPort);
        return connector;
    }

附:tomcat直接配置文件配置

http:                connectionTimeout="20000"
               relaxedQueryChars="[]|{}^\`"<>"
               redirectPort="8443" />

https:配置对应的节点就行了

 

你可能感兴趣的:(springboot,java)