【发布时间】:2018-03-26 08:05:30
【问题描述】:
作为参考,我们有两个选项可以让 Multipart 与 Spring Security 一起使用:
- 在 Spring Security 之前放置 MultipartFilter
- 在行动中包含 CSRF 令牌
对于第一个选项,我尝试了以下方法:
- 创建 SecurityApplicationInitializer 类:
public class SecurityApplicationInitializer extends AbstractSecurityWebApplicationInitializer { @Override protected void beforeSpringSecurityFilterChain(ServletContext servletContext) { insertFilters(servletContext, new MultipartFilter()); } }
在 application.properties
spring.security.filter.order=5987654322@中更改 spring 安全过滤器顺序然后添加FilterRegistrationBean
@Bean @Order(0) public FilterRegistrationBean registerMultipartFilter() { FilterRegistrationBean reg = new FilterRegistrationBean<>(new MultipartFilter()); reg.setOrder(1); return reg; }
不幸的是,它们都不起作用,我尝试禁用 csrf 保护,它按预期工作,那么我的配置有什么问题?
【问题讨论】:
-
我一个一个地试了一遍,然后全部都试了一遍。我也尝试删除 @EnableWebSecurity 但它仍然不起作用
-
对于第二个选项(将 CSRF 令牌添加到表单中),它可以正常工作
-
是的,使用第二个选项,但我真的很想知道为什么第一个选项不起作用
-
谢谢兄弟,抱歉问题过于复杂,原来我需要在表单中添加
th:action
标签: java spring-mvc spring-boot spring-security multipart