使用Spring安全性保存多部分表单数据时出现错误HTTP状态405-请求方法';邮政';不支持 通过返回HTTP状态405的spring表单上载文件-不支持请求方法“POST”,已启用spring安全性 基于Java的配置 模型 控制器 形式 请求头

使用Spring安全性保存多部分表单数据时出现错误HTTP状态405-请求方法';邮政';不支持 通过返回HTTP状态405的spring表单上载文件-不支持请求方法“POST”,已启用spring安全性 基于Java的配置 模型 控制器 形式 请求头,java,spring,spring-mvc,spring-security,Java,Spring,Spring Mvc,Spring Security,POST/urce/Alumbers HTTP/1.1 主机:本地主机:8080 连接:保持活力 内容长度:96286 缓存控制:最大年龄=0 来源: 升级不安全的请求:1 内容类型:多部分/表单数据;boundary=--WebKitFormBoundaryrAL3hxUGtppolJFd 用户代理:Mozilla/5.0(Windows NT 6.1;Win64;x64)AppleWebKit/537.36(KHTML,类似Gecko)Chrome/68.0.3440.106 Safari/

POST/urce/Alumbers HTTP/1.1

主机:本地主机:8080

连接:保持活力

内容长度:96286

缓存控制:最大年龄=0

来源:

升级不安全的请求:1

内容类型:多部分/表单数据;boundary=--WebKitFormBoundaryrAL3hxUGtppolJFd

用户代理:Mozilla/5.0(Windows NT 6.1;Win64;x64)AppleWebKit/537.36(KHTML,类似Gecko)Chrome/68.0.3440.106 Safari/537.36

接受:text/html、application/xhtml+xml、application/xml;q=0.9,图像/webp,图像/apng,/;q=0.8

推荐人:

接受编码:gzip,deflate,br

接受语言:en-US,en;q=0.9

Cookie:JSESSIONID=1ED3DB210F38EC734E99CE420E16042B_ga=GA1.1.1771599779.1532604925_gid=GA1.1.1755993342.1534396304_gat=1

DNT:1


响应头 不允许使用HTTP/1.1 405方法

服务器:ApacheCoote/1.1

X-Content-Type-Options:nosniff

X-XSS-Protection:1;模式=块

缓存控制:无缓存,无存储,最大年龄=0,必须重新验证

Pragma:没有缓存

过期日期:0

X帧选项:拒绝

允许:获取

内容类型:text/html;字符集=ISO-8859-1

内容语言:英语

内容长度:1047

日期:2018年8月17日星期五08:49:28 GMT


解决方案 通过在应用程序配置中的public commons multipartresolver getMultipartResolver()方法之上指定@Bean(name=“filtermultippartresolver”)注释,扩展WebMVCConfigureAdapter解决了我的问题

确保bean名为filterMultipartResolver(name=“filterMultipartResolver”),因为MultipartFilter不会拾取任何其他bean名

我的初始配置不起作用,因为这个bean被命名为name=“multipartResolver”,我还通过删除@bean注释中的名称进行了测试

我遵循了本文提供的解决方案


请尝试此操作我不想在我的操作中包含csrf令牌,我想将MultipartFilter放在Spring Security之前,然后在控制器中尝试添加@Secured(AuthoritiesConstants.USER)Added@Secured(AuthoritiesConstants.USER)到控制器中在应用程序配置中获得相同错误bean名称应命名为[@bean(name=“filterMultipartResolver”)]()
    public class SecurityWebApplicationInitializer extends AbstractSecurityWebApplicationInitializer {

        @Override
        protected void beforeSpringSecurityFilterChain(ServletContext servletContext) {
            insertFilters(servletContext, new MultipartFilter());
        }

    }
    @Entity
    @Table(name="alumni")
    public class Alumni implements Serializable{

        private static final long serialVersionUID = 1L;

        @Id @GeneratedValue(strategy=GenerationType.IDENTITY)
        private Integer id;

        @NotEmpty
        @Column(name="studentName", nullable=false)
        private String studentName;

        @NotEmpty
        @Column(name="program", nullable=false)
        private String program;

        @Transient
        private MultipartFile file;

        @Column(name="content")
        @Lob
        private Blob content;

        @Column(name="contentType", nullable=false)
        private String contentType;

        @Column(name="fileName", nullable=false)
        private String fileName;


        public Integer getId() {
            return id;
        }

        public void setId(Integer id) {
            this.id = id;
        }

        public String getStudentName() {
            return studentName;
        }

        public void setStudentName(String studentName) {
            this.studentName = studentName;
        }

        public String getProgram() {
            return program;
        }

        public void setProgram(String program) {
            this.program = program;
        }

        public Blob getContent() {
            return content;
        }

        public void setContent(Blob content) {
            this.content = content;
        }

        public String getContentType() {
            return contentType;
        }

        public void setContentType(String contentType) {
            this.contentType = contentType;
        }

        public String getFileName() {
            return fileName;
        }

        public void setFileName(String fileName) {
            this.fileName = fileName;
        }

        public MultipartFile getFile() {
            return file;
        }

        public void setFile(MultipartFile file) {
            this.file = file;
        }

    }
    @RequestMapping(value={"/alumni"}, method=RequestMethod.POST)
    public String saveAlumni(@Valid Alumni alumni, BindingResult result, ModelMap model) {
        System.out.println("Alumni : "+alumni);
        if (result.hasErrors()) {
            model.addAttribute("errors", result.getAllErrors());
            return "alumni_u";
        } else {

            Verification verification = verificationService.getByTypeAndVerificationOn(VerificationType.EMAIL.getVerificationType(), alumni.getEmail());

            if(verification!=null && verification.getCode().equals(alumni.getEmailVerificationCode())){
                if(alumni.getFile()!=null){
                    try{
                        if(Arrays.asList(imageArray).contains(alumni.getFile().getContentType())){
                            alumni.setContent(new SerialBlob(alumni.getFile().getBytes()));
                            alumni.setContentType(alumni.getFile().getContentType());
                            alumni.setFileName(alumni.getFile().getOriginalFilename());
                            alumniService.save(alumni);
                        }else{
                            model.addAttribute("errors",  messageSource.getMessage("NotAllowed.alumni.image.format", null, null));
                            return "alumni_u";
                        }
                    }catch(Exception e){
                        logger.error(messageSource.getMessage("Error.alumni.file.blob", null, null));
                        e.printStackTrace();
                        model.addAttribute("errors", messageSource.getMessage("Error.alumni.file.blob", null, null));
                        return "alumni_u";
                    }
                }else{
                    alumniService.save(alumni);
                }
            }else{
                model.addAttribute("errors", messageSource.getMessage("Invalid.alumni.verificationCode.email", new Object[] {alumni.getEmail()}, null));
                return "alumni_u";
            }

            model.addAttribute("success", messageSource.getMessage("success.alumni.form.submition", null, null));
            return "alumniSuccess_u";
        }
    }
    <form:form method="POST" modelAttribute="alumni" enctype="multipart/form-data" >

        <form:errors path="*" class="has-error" />
        <form:input type="hidden" path="id" id="id" />

       <ul>
         <li class="alumni-leftinput clear">
            <label>Name* :</label>
            <form:input type="text" path="studentName" id="studentName" onkeypress="return keyRestrict(event, 'char');"/>
            <div class="has-error">
                <form:errors path="studentName" class="help-inline"/>
            </div>
         </li>
         <li class="alumni-leftinput clear">
            <label>Department/Program* :</label>
            <form:select path="program" class="form-control input-sm" onchange="getAlumniCourse();">
                <form:option value="" label="--- Select ---" />
                <form:option value="Under Graduate" label="Under Graduate - UG"/>
                <form:option value="Post Graduate" label="Post Graduate - PG"/>
            </form:select>
            <div class="has-error">
                <form:errors path="program" class="help-inline"/>
            </div>
         </li>
         <li class="full-width clear">
            <label>Recent color photograph (Image dimensions 2" x 2") :</label>
            <form:input type="file" path="file" id="file" />
            <span>Upload Bitmap / jpeg / gif / png formats only. Size below 2MB</span>
         </li>
         <li class="clear">
            <button type="submit" class="dt-sc-button noborder" value="Submit">Submit</button>
         </li>
       </ul>
     <input type="hidden" name="_csrf" value="7ba6b5a7-7fed-4bb6-b54e-a781576e85e3">
    @Bean
    public CommonsMultipartResolver multipartResolver() throws IOException{
        CommonsMultipartResolver resolver = new CommonsMultipartResolver();
        resolver.setDefaultEncoding("utf-8");
        resolver.setMaxUploadSizePerFile(5242880);//5MB         
        return resolver;
    }
    @Bean(name="filterMultipartResolver")
    public CommonsMultipartResolver getMultipartResolver() throws IOException{
        CommonsMultipartResolver resolver = new CommonsMultipartResolver();
        resolver.setDefaultEncoding("utf-8");
        resolver.setMaxUploadSizePerFile(5242880);//5MB         
        return resolver;
    }