最近在搞python项目用java重构,出现了各种问题,记录如下:
1 post请求失败,报csrf错误
错误日志:
018-07-30 10:46:51.568 ERROR 24753 --- [nio-7001-exec-2] ssDeniedHandlerLoggingMethodBeforeAdvice : To access request URI [/warehouseItem/importWarehouseSku.json] is denied , caused by : Invalid CSRF Token 'null' was found on the request parameter '_csrf' or header 'X-XSRF-TOKEN'.出现问题原因为:spring-security组件从3升级到4后修改了安全验证,将post排除在外了。
修复方案:application.properties文件
方法1:关闭post的csrf校验
security.enableCsrf = false spring.security.csrf.supportedMethods = PUT
方法2:根据黑名单关闭csrf校验
spring.security.csrf.url.style = regex spring.security.csrf.url.included = /.*? spring.security.csrf.url.excluded = ^/csrf/nocheck
2 响应头信息有set-cookie返回
这个也是spring-security安全组件导致的。关闭csrf后就可以了
3 url中有特殊字符串请求报错400
详细报错信息如下:
2019-7-30 10:29:15 org.apache.coyote.http11.AbstractHttp11Processor process 信息: Error parsing HTTP request header Note: further occurrences of HTTP header parsing errors will be logged at DEBUG level. java.lang.IllegalArgumentException: Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC 3986 at org.apache.coyote.http11.InternalAprInputBuffer.parseRequestLine(InternalAprInputBuffer.java:238) at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1028) at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:637) at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.doRun(AprEndpoint.java:2555) at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:2544) at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918) at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) at java.lang.Thread.run(Thread.java:662)
3.1 tomcat项目
这是因为新版tomcat(Tomcat在 7.0.73, 8.0.39, 8.5.7 版本后,添加了对于http头的验证。)严格按照RFC 3986规范进行访问解析,而 RFC 3986规范定义了Url中只允许包含英文字母(a-zA-Z)、数字(0-9)、-_.~4个特殊字符以及所有保留字符(RFC3986中指定了以下字符为保留字符:! * ’ ( ) ; : @ & = + $ , / ? # [ ]), 如果传入参数有{}或|就会报错,我是由于代码中有|导致报错
3.1.1 解决方案一
在conf/catalina.properties中最后添加2行 tomcat.util.http.parser.HttpParser.requestTargetAllow=|{} org.apache.tomcat.util.buf.UDecoder.ALLOW_ENCODED_SLASH=true
这个地方只能配置|、{、} 允许这三个字符,对于其他的(例如" < > [ \ ] ^ ` { | } .),在请求时,仍然拦截,如果使用了|{}之外的其他字符那怎么办呢?那就还需要如下配置。
在conf/server.xml中的<Connector>节点中,添加2个属性:
relaxedPathChars="|{}[]," relaxedQueryChars="|{}[],"
3.1.2 解决方案二
降级tomcat,使用低版本就不会出现这个问题了
3.1.3 解决方案三
请求方再有特殊字符的参数时要做urlencode。或者改为post请求,参数放body中
3.2 spring-boot项目
出问题其实也是tomcat导致的,由于spring-boot启用内置的tomcat导致。
-
解决方案一
需要在tomcat的配置文件中设置 org.apache.tomcat.util.buf.UDecoder.ALLOW_ENCODED_SLASH=true tomcat.util.http.parser.HttpParser.requestTargetAllow=|{} 更直接的方法是在JVM启动参数中添加 -Dtomcat.util.http.parser.HttpParser.requestTargetAllow=|{} -Dorg.apache.tomcat.util.buf.UDecoder.ALLOW_ENCODED_SLASH=true post请求避免options 请求头的 content-type 设置为 application/x-www-form-urlencoded 如果是sh配置文件启动方式需要增加参数: SERVICE_OPTS="${SERVICE_OPTS} -Dtomcat.util.http.parser.HttpParser.requestTargetAllow=\"|{}\"" SERVICE_OPTS="${SERVICE_OPTS} -Dorg.apache.tomcat.util.buf.UDecoder.ALLOW_ENCODED_SLASH=true"
另一种解决方案:
springboot从1.4.7.RELEASE. 升级到 1.5.14.RELEASE后,遇到了embedded Tomcat中对URI的校验规则限制,导致URL中含有“{}”等字符的GET请求出现400响应;最后通过定制connector的 'relaxedQueryChars'属性才解决<br>connector.setAttribute("relaxedQueryChars", "[\]^`{|}");
详细请参考:https://stackoverflow.com/questions/51703746/setting-relaxedquerychars-for-embedded-tomcat
4 spring-boot请求返回template页面
出现如下报错,但是不影响接口正常使用
unable to find resource 'XXX.vm' in any resource loader
解决:spring.velocity.enabled = false
5 post重定向之后,浏览器重新发起的是get请求
(1)浏览器端报CORS policy相关错误
服务端设置 response header参数,解决跨域重定向问题
Access-Control-Allow-Credentials = true Access-Control-Allow-Origin = request hedaer中的Origin
(2)浏览器接到请求后,发起的是GET请求,且原来post请求里的参数全都丢失了
服务端设置返回码修改为307
重定向的代码从
httpResponse.sendRedirect(targetURL);
修改为
httpResponse.setStatus(307); httpResponse.setHeader("Location",targetURL);
相关推荐
项目标题:《深入Python设计模式:原理与实践的重构之旅》 项目概述: 本项目致力于探索和学习Python中的设计模式,通过实际的代码重构来深化理解。项目包含35个文件,主要以Python语言编写,同时涉及Java语言的一...
包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】: 所有源码都经过严格测试,可以直接运行。 功能在确认正常工作后才上传。 【适用人群】...
重构仔细查看,改进代码Java开发Java经验技巧共5页.pdf.zip
python简单易学,与C和... 明确优雅:Python的语法非常简洁,代码量少,非常容易编写,代码的测试、重构、维护等都非常容易。一 个小小的脚本,用C可能需要1000行,用JAVA可能几百行,但是用Python往往只需要几十行!
编程语言和开发技术:如Java、$C++、Python、JavaScript、Ruby等。 数据库技术:如关系型数据库(如MySQL、Oracle、SQL Server)和非关系型数据库(如MongoDB、Redis)等。 前端开发:HTML、CSS、JavaScript等用于...
资源内容:基于乒乓球颜色重构问题可以识别图片和视频的Matlab仿真(完整源码+数据).rar 代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 适用对象:工科生、数学专业、算法等方向学习者。 ...
ai原始码java 机器学习用于软件重构 该存储库包含有关使用机器学习方法来推荐软件重构的机器学习部分。 论文和附录 该文件可以在这里找到: 原始数据集可以在这里找到: 完整结果的附录可以在这里找到: 机器学习...
所有存入Zookeeper的数据使用3...(Python重构测试坑太多) 移除行情记录功能。(非业务必须功能,常有特殊需求导致稳定性下降) 移除历史数据访问,K线计算等功能。(功能精简) 升级到JDK 17+ JavaFX 17+ Gradle 7+
EmeraldFX-JythonFX Web浏览器EmeraldFX的Gradle源代码/构建库-用Jython,Java和Python用JavaFX编写的Web浏览器。 博客文章讨论了我在构建EmeraldFX方面的经验和决策,网址为( )。 在Linux Mint,SUSE Linux,...
包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】: 所有源码都经过严格测试,可以直接运行。 功能在确认正常工作后才上传。 【适用人群】...
IntelliJ在业界被公认为最好的java开发⼯具,尤其在智能代码助⼿、代码⾃动提⽰、重构、J2EE⽀持、各类版本⼯具(git、svn等)、JUnit、CVS整合、代码分析、 创新的GUI设计等⽅⾯的功能可以说是超常的。IDEA是...
软件开发设计:应用软件开发、系统软件开发、移动应用开发、网站开发C++、Java、python、web、C#等语言的项目开发与学习资料 硬件与设备:单片机、EDA、proteus、RTOS、包括计算机硬件、服务器、网络设备、存储设备...
公司后端服务使用 java 重构后,很多接口采用了阿里的 dubbo 协议。而 python 是无法直接调用 dubbo 接口的,但可以通过 telnet 调用,具体可以通过 telnetlib 模块的 Telnet类 来调用,只需要四行代码即可实现: ...
包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】: 所有源码都经过严格测试,可以直接运行。 功能在确认正常工作后才上传。 【适用人群】...
获取java各种项目源码 preparation Language: Java 8 Environment: MacOS, 16G RAM Database: Mysql5.7 建议Python2.7 todo list springboot重构项目 集成swagger,方便调试 集成mybatis plus和Mysql数据库存放应用...
当前支持的语言是C,C ++,JAVA,Python和C#。依存关系必须安装以下Python软件包: lt pip3 install --user nltk Gensim pip3 install --user gensim 朋克python3 -m nltk.downloader punkt开始吧以python3 -W ...
JCR是一个基于Python的Web应用,面向大型项目和非常正式的code review。它可以用来review任何类型的代码,不仅是java代码,但一些特殊的功能只适用于Java项目。 JCR 主要想协助: 审查者 - 所有的代码更改都会被...
架构师和开发者 -可以查看所有Revier项目的细节,也可以查看特定文件的评语,这样有利于我们重构代码。 官方主页:http://jcodereview.sourceforge.net/ 当前版本:0.7.2.1(2010-04-13) 支持的SCM:SVN,也支持...
迁移指南(中文版):《》 灵感来源: 和蚁人行:重构建模: 语言支持 Java(全部功能) Golang(支持:分析,待办事项,概念,git,建议) 打字稿(TBC) Python(支持:分析,待办事项,概念,git,建议) 功能...
C++、Java、Shell、Python 和 SQL 中) 算法 # 标题 困难 代码 347 前 K 个频繁元素 中等的 , 345 反转字符串的元音 简单的 344 反转字符串 简单的 , , 343 整数中断 中等的 , 342 四的力量 简单的 , 341 展平嵌套...