我可以使用@ConditionalOnProperty
来启用/禁用整个@RestController
,例如:
@RestController
@ConditionalOnProperty(name = "com.example.api.controller.decision.DecisionController.enabled", havingValue = "true")
@RequestMapping("/v1.0/decisions")
public class DecisionController {
}
以下配置可正常工作。但我需要更细粒度地控制此控制器并启用/禁用其中某些方法的访问权限,例如:@RestController
@ConditionalOnProperty(name = "com.example.api.controller.decision.DecisionController.enabled", havingValue = "true")
@RequestMapping("/v1.0/decisions")
public class DecisionController {
@ConditionalOnProperty(name = "com.example.api.controller.decision.DecisionController.create.enabled", havingValue = "true")
@PreAuthorize("isAuthenticated()")
@RequestMapping(method = RequestMethod.POST)
public DecisionResponse create(@Valid @RequestBody CreateDecisionRequest request, Authentication authentication) {
...
}
}
如您所见,我已将@ ConditionalOnProperty
添加到 create
方法中,但此方法无效,并且如果启用了 DecisionController
,即使在我的 application.properties
中不存在 com.example.api.controller.decision.DecisionController.create.enabled
属性, create
方法也会被启用。
在这种情况下,如何正确启用/禁用 create
方法?