Spring Boot 不允许加载iframe问题解决


 spring Security下,X-Frame-Options默认为DENY,非spring Security环境下,X-Frame-Options的默认大多也是DENY,这种情况下,浏览器拒绝当前页面加载任何Frame页面,设置含义如下:

    DENY:浏览器拒绝当前页面加载任何Frame页面
    SAMEORIGIN:frame页面的地址只能为同源域名下的页面
    ALLOW-FROM:origin为允许frame加载的页面地址。


在spring boot项目中出现不能加载iframe

页面报一个"Refused to display 'http://......' in a frame because it set 'X-Frame-Options' to 'DENY'. "错误

解决方式:

因spring Boot采取的java config,在配置spring security的位置添加:

@Override
protected void configure(HttpSecurity http) throws Exception {
       http.headers().frameOptions().disable();
     http
      .csrf().disable();
     http
      .authorizeRequests()
             .anyRequest().authenticated();
      
      http.formLogin()
          .defaultSuccessUrl("/platform/index",true)
          .loginPage("/login")
          .permitAll()
        .and()
          .logout()
           .logoutUrl("/logout");
      
      http.addFilterBefore(wiselyFilterSecurityInterceptor(),FilterSecurityInterceptor.class);
        
      

}

以下是一个使用Spring Boot编写文件在线预览接口的示例: 1. 在`pom.xml`文件中添加以下依赖: ```xml <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>4.1.2</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>4.1.2</version> </dependency> <dependency> <groupId>org.apache.pdfbox</groupId> <artifactId>pdfbox</artifactId> <version>2.0.21</version> </dependency> ``` 2. 编写一个控制器类,处理文件预览请求: ```java @RestController @RequestMapping("/preview") public class PreviewController { @GetMapping("/{fileName:.+}") public ResponseEntity<byte[]> previewFile(@PathVariable String fileName) throws IOException { String extension = FilenameUtils.getExtension(fileName); MediaType mediaType = MediaType.APPLICATION_OCTET_STREAM; if ("pdf".equalsIgnoreCase(extension)) { mediaType = MediaType.APPLICATION_PDF; } else if ("doc".equalsIgnoreCase(extension) || "docx".equalsIgnoreCase(extension)) { mediaType = MediaType.APPLICATION_MSWORD; } else if ("xls".equalsIgnoreCase(extension) || "xlsx".equalsIgnoreCase(extension)) { mediaType = MediaType.APPLICATION_EXCEL; } else if ("ppt".equalsIgnoreCase(extension) || "pptx".equalsIgnoreCase(extension)) { mediaType = MediaType.APPLICATION_POWERPOINT; } HttpHeaders headers = new HttpHeaders(); headers.setContentType(mediaType); headers.setContentDisposition(ContentDisposition.builder("inline").filename(fileName).build()); byte[] fileBytes = Files.readAllBytes(Paths.get(fileName)); return new ResponseEntity<>(fileBytes, headers, HttpStatus.OK); } } ``` 3. 在`application.properties`文件中配置文件存储路径: ```properties file.upload-dir=/path/to/uploaded/files/ ``` 4. 使用`MultipartFile`接收文件上传请求,保存文件到指定路径: ```java @PostMapping("/upload") public ResponseEntity<String> uploadFile(@RequestParam("file") MultipartFile file) throws IOException { String fileName = file.getOriginalFilename(); Path filePath = Paths.get(uploadDir + fileName); Files.write(filePath, file.getBytes()); return ResponseEntity.ok("File uploaded successfully"); } ``` 5. 在前端页面中使用`<iframe>`标签加载预览接口,例如: ```html <iframe src="/preview/example.pdf" width="100%" height="600"></iframe> ``` 注意:本示例中只实现了对PDF、Word、Excel和PowerPoint文件的预览,如果需要支持其他类型的文件,需要根据实际情况进行修改。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值