几年来我们一直在我们的应用程序中使用Spring Security。上周,我们将Spring Security从3.1.4版本升级到了3.2.0。升级进行得很好,并且升级后我们没有发现任何错误。
在浏览Spring Security 3.2.0文档时,我们发现了CSRF保护和安全标头周围的新增功能。我们按照Spring Security 3.2.0文档中的说明为受保护的资源启用CSRF保护。它适用于常规表单,但不适用于我们应用程序中的多部分表单。提交表单时,CsrfFilter
由于请求中不存在CSRF令牌(通过DEBUG日志确定)而引发“拒绝访问”错误。我们尝试使用Spring Security文档中建议的第一个选项使CSRF保护与多部分表单一起使用。我们不希望使用第二个建议的选项,因为它会通过URL泄漏CSRF令牌并带来安全风险。
基于文档的配置的相关部分可以在Github上的Gist中找到。我们正在使用Spring 4.0.0版本。
请注意,我们已经尝试了以下变体而没有成功:
MultipartFilter
in web.xml
。MultipartFilterin
设置解析器bean名称web.xml
。filterMultipartResolver
在webContext.xml
。我能够在Spring Security团队的帮助下解决此问题。我已经更新了要点,以反映有效的配置。我必须按照下面给出的步骤进行操作,以使所有功能都能按预期工作。
1.常用步骤
添加一个MultipartFilter
,web.xml
以确保在Spring Security配置之前添加它:
<filter>
<display-name>springMultipartFilter</display-name>
<filter-name>springMultipartFilter</filter-name>
<filter-class>org.springframework.web.multipart.support.MultipartFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>springMultipartFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter>
<display-name>springSecurityFilterChain</display-name>
<filter-name>springSecurityFilterChain</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter-mapping>
<filter-name>springSecurityFilterChain</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>ERROR</dispatcher>
<dispatcher>FORWARD</dispatcher>
<dispatcher>REQUEST</dispatcher>
</filter-mapping>
2.1。使用Apache Commons Multipart解析器
确保filterMultipartResolver
在根Spring应用程序上下文中有一个名为Apache Commons Multipart Resolver的bean 。我将再次强调这一点,确保在Spring Spring根目录(通常称为applicationContext.xml)中声明了Multipart Resolver。例如,
web.xml
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
classpath*:springWebMultipartContext.xml
</param-value>
</context-param>
springWebMultipartContext.xml
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="filterMultipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="maxUploadSize" value="100000000" />
</bean>
</beans>
确保该Bean称为filterMultipartResolver
,因为在中未MultipartFilter
配置任何其他Bean名称web.xml。我的初始配置无法正常工作,因为此bean名为multipartResolver
。我什至尝试将Bean名称传递给MultipartFilterusing,web.xml init-param
但这也不起作用。
2.2。使用Tomcat Multipart支持
Tomcat 7.0+具有内置的多部分支持,但必须明确启用它。context.xml
如下更改全局Tomcat 文件,或context.xml
在WAR文件中包括本地文件,以使该支持有效,而无需对应用程序进行任何其他更改。
<Context allowCasualMultipartParsing="true">
...
</Context>
在使用Apache Commons Multipart Resolver进行了这些更改之后,到目前为止,我们的应用程序可以在Tomcat,Jetty和Weblogic上运行。
我们在应用程序中使用Spring Security性已有几年了。上周,我们将Spring Security从3.1.4版升级到3.2.0版。升级进行得很顺利,升级后我们没有发现任何错误。 在浏览Spring Security 3.2.0文档时,我们发现了围绕CSRF保护和安全标头的新增功能。我们遵循Spring Security 3.2.0文档中的说明,为受保护的资源启用CSRF保护。在我们的应用
问题内容: 我有一个API端点,必须向其发送多部分HTTP请求,该请求由两部分组成(文件系统文件)和(JSON对象)。 经过一些研究,我发现了如何在AngularJS中执行多部分请求: 1) 该函数最初具有以下形式: 此实现的结果是,请求的各个部分没有设置。 Blob ,对象看起来像这样(有点混乱,基本上第一部分是of ,第二个): 第二种方法为请求的每个部分设置了正确的内容,但没有为部分设置任何
当我尝试上传一个文件和标题时,我得到以下异常。我正在将Content-Type头设置为multipart/form-data。 我如何在Spring Security后面做文件上传?这个请求似乎从未被转换成MultiPartHttpServerRequest,所以它不起作用? 如果更改方法签名以采用@RequestParam MultipartFile,则会出现如下异常: ...但我在XML中配置
多请求支持 控制台编辑器允许您编写相互层叠的多个请求,像在控制台章节展示中那样,您可以通过定位光标并使用动作菜单向 Elasticsearch 提交请求。类似的,您可以一次选择多个请求: 图 5. 选择多个请求 控制台会依次提交请求到 Elasticsearch ,并将 Elasticsearch 返回的结果显示在右边窗口。这在调试问题或在多个场景中尝试查询组合时会非常方便。 选择多个请求还允许您
我试图使一个宁静的控制器上传文件。我看到了这一点,做了这个控制器: 然后我用邮递员发送了一份pdf: 但服务器崩溃,出现以下错误: 我再次找到了这个,并添加了一个文件 不幸的是,它仍然抱怨同样的错误。
问题内容: 我试图使一个宁静的控制器来上传文件。我已经看到 了,并做了这个控制器: and then i used postman to send a pdf: But the server crashes with the error: 我再次找到了这个,并添加了一个bean.xml文件 不幸的是,它仍然抱怨相同的错误。 问题答案: 当您将邮递员用于多部分请求时,请不要 在页眉中指定自定义Con