当我在 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 应用程序的域。
我开始从 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 应用程序的域。