java - 如何使 MultipartFilter 与 Spring Boot 一起使用

标签 java spring-mvc spring-boot spring-security multipart

作为引用,我们有两个选项可以使 Multipart 与 Spring Security 配合使用:

  • 将 MultipartFilter 置于 Spring Security 之前
  • 在操作中包含 CSRF token

对于第一个选项,我尝试了以下方法:

  • 创建 SecurityApplicationInitializer 类:
public class SecurityApplicationInitializer extends AbstractSecurityWebApplicationInitializer {
    @Override
    protected void beforeSpringSecurityFilterChain(ServletContext servletContext) {
        insertFilters(servletContext, new MultipartFilter());
    }
}
  • 更改 application.properties 中的 spring security 过滤器顺序 spring.security.filter.order=5

  • 然后添加FilterRegistrationBean

@Bean
@Order(0)
    public FilterRegistrationBean registerMultipartFilter() {
    FilterRegistrationBean reg = new FilterRegistrationBean<>(new MultipartFilter());
    reg.setOrder(1);
    return reg;
}

不幸的是,它们都不起作用,我尝试禁用 csrf 保护,它按预期工作,那么我的配置出了什么问题?

最佳答案

事实证明 Spring Boot 已经为我们做了很多事情。问题根本不在于 MultipartFilter。使用 Spring Boot 时,我们甚至不需要设置 MultipartFilter 来进行 CSRF 保护。

真正的问题是我的 Thymeleaf 表单:

<form method="POST" enctype="multipart/form-data">
            <input type="file" name="file"/>
            <input type="submit" value="Upload"/>

如果没有th:action,Spring Boot将不会自动为我们插入隐藏的csrf token 。

<form th:action="''" method="POST" enctype="multipart/form-data">
            <input type="file" name="file"/>
            <input type="submit" value="Upload"/>
</form>

enter image description here

关于java - 如何使 MultipartFilter 与 Spring Boot 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49486675/

相关文章:

java - 使用 Spring Security 进行授权

java - spring mvc Autowiring sessionFactory 给出 null 对象

java - 在唯一约束 JPA/Hibernate 期间添加自定义错误消息的更好方法

java - 无法执行目标 org.springframework.boot :spring-boot-maven-plugin:2. 2.5.RELEASE:run (default-cli)

java - 如何使生成的类包含 XML 架构文档中的 Javadoc

java - 如何将logo.jpg(图片)设置为登录页面专用

java - 如何构建 Sparql 查询来获取带空格的字符串

java - 使用 spring 数据 JPA 返回子集/子模式

java - 数据库运行状况指示器中的 "hello"属性是什么意思? ( Spring 致动器)

java - URLEncoder.encode(string, "UTF-8") 是一个糟糕的验证吗?