当前位置: 首页 > 知识库问答 >
问题:

Spring Boot+React CORS问题没有Spring Security性

韶宏邈
2023-03-14

我使用的是Spring Boot2.2.2,作为REST服务发布,并为前端做出反应。

@RestController
public class FeedController {
    @Autowired
    private IFeedService IFeedService;

    @CrossOrigin(origins = "http://localhost:3000")
    @GetMapping(path="/v1/getdashboard")
    public ResponseEntity<String> feedDashBoardController(){
        String result = null;
        HttpStatus httpStatus = HttpStatus.BAD_REQUEST;
        try {

             List<FeedData> dashBoardFeedInfo = IFeedService.getDashBoardFeedService();

             // Create ObjectMapper
            ObjectMapper mapper = new ObjectMapper();
            JsonNode dataNode = mapper.valueToTree(dashBoardFeedInfo);

            result = FeedResponseData.generateFeedResponse(dataNode);
            httpStatus = HttpStatus.OK;

        }catch(TBServiceException e) {
            result = AppExceptions.handleException("Something Went Wrong");
            httpStatus = HttpStatus.BAD_REQUEST;
        }

        return new ResponseEntity<String>(result,httpStatus);
    }
}
@SpringBootApplication
public class TechnicalBlogApplication {

    public static void main(String[] args) {
        SpringApplication.run(TechnicalBlogApplication.class, args);
        System.out.println("Application Main - Update -1");

    }

    @Bean
    public WebMvcConfigurer corsConfigurer() {
        return new WebMvcConfigurer() {
            @Override
            public void addCorsMappings(CorsRegistry registry) {
                registry.addMapping("/v1/getdashboard").allowedOrigins("http://localhost:3000");
            }
        };
    }
}

我的Spring应用程序属性:

spring.profiles.active=dev
server.port=6001
server.servlet.context-path=/technical-blog

我的React代码片段:

async componentDidMount() {
const dashboardData= await fetch("http://localhost:6001/technical-blog/v1/getdashboard");

console.log("dash ",dashboardData)
}

我也尝试过设置标题,下面是重新修改的控制器。我有多个CORS定义错误。

@RestController
public class FeedController {
@Autowired
private IFeedService IFeedService;

@CrossOrigin(origins = "http://localhost:3000")
@GetMapping(path="/v1/getdashboard")
public ResponseEntity<String> feedDashBoardController(){
    String result = null;
    HttpStatus httpStatus = HttpStatus.BAD_REQUEST;
    try {

         List<FeedData> dashBoardFeedInfo = IFeedService.getDashBoardFeedService();

         // Create ObjectMapper
        ObjectMapper mapper = new ObjectMapper();
        JsonNode dataNode = mapper.valueToTree(dashBoardFeedInfo);

        result = FeedResponseData.generateFeedResponse(dataNode);
        httpStatus = HttpStatus.OK;

    }catch(TBServiceException e) {
        result = AppExceptions.handleException("Something Went Wrong");
        httpStatus = HttpStatus.BAD_REQUEST;
    }

    return new ResponseEntity<String>(result,setHeaders(),httpStatus);
}
}

private HttpHeaders setHeaders() {
    List<HttpMethod> allowedMethods = new ArrayList<>();
    allowedMethods.add(HttpMethod.GET);
    allowedMethods.add(HttpMethod.POST);

    HttpHeaders httpHeaders = new HttpHeaders();
    httpHeaders.setContentType(MediaType.APPLICATION_JSON);
    //httpHeaders.setAccessControlAllowOrigin("*");
    httpHeaders.setAccessControlAllowCredentials(true);
    httpHeaders.setAccessControlAllowMethods(allowedMethods);
    httpHeaders.setAccessControlMaxAge(3600);
    return httpHeaders;
}

共有1个答案

邹晟睿
2023-03-14

我认为您应该将@crossorigin(origins=“http://localhost:3000”)放在控制器本身上,因为请求首先指向的是控制器,而不是函数

所以会是那样

@RestController
@CrossOrigin(origins = "http://localhost:3000")
public class FeedController {
@Autowired
private IFeedService IFeedService;


@GetMapping(path="/v1/getdashboard")
public ResponseEntity<String> feedDashBoardController(){
    String result = null;
    HttpStatus httpStatus = HttpStatus.BAD_REQUEST;
    try {

         List<FeedData> dashBoardFeedInfo = IFeedService.getDashBoardFeedService();

         // Create ObjectMapper
        ObjectMapper mapper = new ObjectMapper();
        JsonNode dataNode = mapper.valueToTree(dashBoardFeedInfo);

        result = FeedResponseData.generateFeedResponse(dataNode);
        httpStatus = HttpStatus.OK;

    }catch(TBServiceException e) {
        result = AppExceptions.handleException("Something Went Wrong");
        httpStatus = HttpStatus.BAD_REQUEST;
    }

    return new ResponseEntity<String>(result,setHeaders(),httpStatus);
}
}
 类似资料:
  • 我正在设置Angular Spring Security模块来登录和注册用户。当我注册一个用户时,一切都正常。注册后的最后一步是自动登录,但我遇到了以下错误: XMLHttpRequest无法加载超文本传输协议//localhost:8080/com-tesis/login.请求的资源上不存在“访问控制允许起源”标头。因此不允许访问起源“超文本传输协议//localhost:9000”。响应的HT

  • Hibernate:/*select generatedAlias0 from User为generatedAlias0*/select user0_.ID为id1_0_,user0_.CREATEDATE为createda2_0_,user0_.Email为email3_0_,user0_.PASSWORD为password4_0_,user0_.Security_LEVEL为security5

  • 本文向大家介绍SpringBoot + SpringSecurity 环境搭建的步骤,包括了SpringBoot + SpringSecurity 环境搭建的步骤的使用技巧和注意事项,需要的朋友参考一下 一、使用SpringBoot+Maven搭建一个多模块项目(可以参考这篇文章 --> 这里) 二、删除父工程的src文件,删除app、browser、core下的.java文件 依赖关系: dem

  • 配置详情 Spring:2.6 我创建了一个带有插件的Spring启动应用程序 春网 H2数据库 pom。xml 应用属性 命令行运行 作者epository.java 著者java(Pojo) 当我启动应用程序并转到http://localhost:8080/h2-console时,我看到一个jdbc: h2:~/test的JDBC URL,而不是jdbc: h2: mem: AS。在控制台中登

  • 似乎没有使用Hikaricp。 例如,Spring。数据源。始终影响最大池大小。Spring数据源。希卡里。最大池大小不受影响。 我设定如下: 然后我通过netstat命令检查连接数。有10个连接。似乎hikari的最大池大小不起作用。即使我删除了spring.datasource.maximum池大小,hikari的最大池大小仍然不起作用。 此外,我设置了以下日志事件,但没有关于HikariCP

  • 本文向大家介绍SpringBoot+Vue前后端分离,使用SpringSecurity完美处理权限问题的解决方法,包括了SpringBoot+Vue前后端分离,使用SpringSecurity完美处理权限问题的解决方法的使用技巧和注意事项,需要的朋友参考一下 当前后端分离时,权限问题的处理也和我们传统的处理方式有一点差异。笔者前几天刚好在负责一个项目的权限管理模块,现在权限管理模块已经做完了,我想

  • 我一直在研究AES-GCM/AES-CTR,主要是为AEAD。我还没有用这个实现任何东西,但从我所读到的一切来看,基本上nonce只是一个短的IV,有一个内部计数器用于每个加密调用。开发人员/需要在32位计数器循环返回之前确保nonce更改,否则相同的nonce(IV)可能与相同的密钥一起使用,这可能会加密相同的纯文本并泄漏加密密钥。 我真的不明白为什么AES-CBC可以使用随机IV但我读到的一些

  • 本文向大家介绍SpringBoot 监控管理模块actuator没有权限的问题解决方法,包括了SpringBoot 监控管理模块actuator没有权限的问题解决方法的使用技巧和注意事项,需要的朋友参考一下 SpringBoot 1.5.9 版本加入actuator依赖后,访问/beans 等敏感的信息时候报错,如下 Tue Mar 07 21:18:57 GMT+08:00 2017 There