当我在 spring boot app with keycloak 和 mysql docker 容器中尝试从 postman post 时,我被禁止了

I get forbidden when i'm trying to post from postman in spring boot app with keycloak and mysql docker containers

我开始从 Manning 那里学习 Spring 云微服务 - Spring 微服务实战 ,以及如何在我的 spring 中使用 Keycloak应用。但是在过去的几天里,我无法更进一步...我成功创建了 keycloak docker 容器,连接到 docker 中的 mysql 容器,来自我们 [=46= 的表格] 应用程序是在 mysql 数据库中创建的,但是当我尝试在数据库上 post 时,我得到 HTTP 错误 403:禁止 ,每次,我都用角色编写简单的测试,看看我是否可以访问一个简单的字符串输出并且它有效,但对于 mysql db 却不能访问 post 我不知道为什么.我激活了 Keycloack 容器的日志...没有错,我唯一得到的是来自 mysql 容器的内容: mbind: Operation not permitted,但不知道是否与此有关。下面我展示一下我的配置,请帮助我!

        @RestController
    @RequestMapping(value = "/facultate")
    public class FacultateController {
    
        private FacultateService facultateService;
    
        public FacultateController(FacultateService facultateService) {
            this.facultateService = facultateService;
        }
    //forbidden
        @RolesAllowed({"USER", "ADMIN"})
        @PostMapping(value = "/post")
        public ResponseEntity postFacultate(@RequestBody Facultate facultate) {
            facultateService.save(facultate);
            return new ResponseEntity(HttpStatus.CREATED);
        }
    //forbidden
        @RolesAllowed("ADMIN")
        @PostMapping(value = "/")
        public String save(@RequestBody Facultate facultate)
        {
            facultateService.save(facultate);
            return "da";
        }
    //forbidden
        @PostMapping(value = "/create")
        public String create(@RequestBody Facultate facultate)
        {
            facultateService.save(facultate);
            return "da";
        }
    //forbidden
        @GetMapping(value = "/{facultateNameId}")
        public ResponseEntity<Facultate> findById(@PathVariable("facultateNameId") String facultateNameId)
        {
            return new ResponseEntity<>(facultateService.getById(facultateNameId), HttpStatus.ACCEPTED);
        }
    //work
        @RolesAllowed("USER")
        @GetMapping(value = "/hi")
        public String sal()
        {
            return "merge";
        }
    //work
        @RolesAllowed({"USER", "ADMIN"})
        @GetMapping(value = "/test")
        public String test()
        {
            return "merge";
        }
    //work
        @RolesAllowed({"ADMIN" , "USER"})
        @GetMapping(value = "/test2")
        public String test2()
        {
            return "merge";
        }
    
//work
        @RolesAllowed("ADMIN")
        @GetMapping(value = "/test3")
        public String test3()
        {
            return "merge";
        }

-除 post 方法外,它适用于所有方法,不关心我是否使用角色,是否经过身份验证,是否经过授权,不适用于 db

docker 撰写文件:

    version: '3'
services:

  keycloak:
    image: jboss/keycloak
    restart: always
    environment:
      DB_VENDOR: MYSQL
      DB_ADDR: database
      DB_DATABASE: petrea
      DB_USER: root
      DB_PASSWORD: ravage123
      KEYCLOAK_USER: admin
      KEYCLOAK_PASSWORD: admin
      KEYCLOAK_LOGLEVEL: DEBUG
      JDBC_PARAMS: "connectTimeout=30000"
    ports:
    - "8080:8080"
    depends_on:
      - database



  database:
    image: mysql:8.0
    container_name: database
    restart: always
    ports:
      - 3306:3306
    environment:
      MYSQL_DATABASE: petrea
      MYSQL_ROOT_PASSWORD: ravage123
      MYSQL_ROOT_USER: root

如果你想让其他人看到,请说

您是否正确设置了 CORS?必须允许请求的来源这样做。看看这个 video on CORS。在 Rest 应用程序的主要 class 中,有一个名为 addCorsMappings 的方法,您可以覆盖它。将映射添加到 CorsRegistry。这些应该是您希望从中调用 REST 应用程序的域。