我可以使用@conditionalnproperty
启用/禁用整个@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) {
...
}
}
正如您可能看到的,我已经将@FactionalOnProperty
添加到create
方法,但这种方法不起作用,并且在启用决策控制器
的情况下,即使com.example.api.controller.decision.DecisionController.create.enabled
属性在我的application.properties
中不存在,也会启用create
方法。
在这种情况下如何正确启用/禁用start
方法?
不幸的是,@ConditionalOnProperty批注不能用于单个@RequestMapping方法。作为一种解决方法,您可以将所需的映射移动到一个单独的控制器bean中。
http://dolszewski.com/spring/feature-toggle-spring-boot/
我希望这一个可能帮助以同样的问题来到这个页面的人。
您还可以使用aop不继续执行方法并将某些状态返回给用户。我在这里使用注释来标记/识别禁用的方法。如果您想根据属性中的某些值禁用,您可以向该注释添加属性。就像您可以添加相同的属性名称和havingvalue并查找这些等等...
@Retention(RUNTIME)
@Target(METHOD)
public @interface DisableMe {}
外观:
@Aspect
@Component
public class DisableCertainAPI {
@Autowired private HttpServletResponse httpServletResponse;
@Pointcut(" @annotation(disableMe)")
protected void disabledMethods(DisableMe disableMe) {
// disabled methods pointcut
}
@Around("disabledMethods(disableMe)")
public void dontRun(JoinPoint jp, DisableMe disableMe) throws IOException {
httpServletResponse.sendError(HttpStatus.NOT_FOUND.value(), "Not found");
}
}
和目标方法:
@DisableMe
@GetMapping(...)
public ResponseEntity<String> doSomething(...){
logger.info("recieved a request");
}
您会看到如下响应:
{
"timestamp": "2019-11-11T16:29:31.454+0000",
"status": 404,
"error": "Not Found",
"message": "Not found",
"path": "/xyz/...."
}
问题内容: 给定带有的“标准” Spring Boot应用程序,例如 是否存在一种注释或技术,可 在 /除非存在/不存在某个应用程序属性的情况下完全阻止端点启动。 注意:测试方法内部的属性并爆炸不是解决方案,因为端点将存在。 我不在乎粒度:即仅启用/禁用方法或整个类都可以。 由于配置文件不是属性,因此通过配置文件进行控制无法解决我的问题。 问题答案: 我发现使用一个简单的解决方案: 加上这个注释,
给定一个带有RestController的“标准”spring boot应用程序,例如 如果/除非某个应用程序属性存在/不存在,是否有注释或技术可以阻止endpoint启动。 注意:测试方法内部的属性并分解不是解决方案,因为endpoint将存在。 我不关心粒度:即只启用/禁用一个方法或整个类都可以。 因为概要文件不是属性,所以通过概要文件进行控制并不能解决我的问题。
在使用E立方管理平台时,有时会有E立方管理平台在EXCEL中没有显示的情况。这是由于EXCEL将E立方管理平台禁用造成的,需要在禁用项目中启用,就可以正常使用了。 下边分别介绍了 Excel2003、 Excel2007、 Excel2010及以上版本的启用方法 一、 Excel2003的启用方法 帮助-->关于,点击 禁用项目,如果有禁用项目,选中并启用,然后关闭Exce
20.2.3 禁用重启 如果您不想使用重启功能,可以使用spring.devtools.restart.enabled属性将其禁用。在大多数情况下,您可以在application.properties中设置它(这仍会初始化重启类加载器,但是它不会监视文件的变化)。 如果您需要完全禁用对重启的支持,比如,由于重启功能不适用某个特定的库,则需要在调用SpringApplication.run(…)之
我在src/main/resources下创建了2个文件: 应用程序。属性 第一个具有从env变量中获取值的属性,而后者具有固定值。 根据这里的具体情况,我以这样的方式推出了Spring靴: 然而,不会产生任何影响,并且应用程序是局部的。属性似乎被忽略。 有什么提示吗?
问题内容: 我必须首先禁用输入,然后单击链接以启用它们。 到目前为止,这是我尝试过的方法,但是没有用。 HTML: jQuery的: 这显示给我,然后输入没有任何变化: 问题答案: ** 使用jQuery时,请始终使用该方法来启用或禁用元素(有关原因,请参见下文)。 在您的情况下,它将是: 为什么在可以使用/ 做到这一点时使用? 基本上,应该获取或设置时,可使用特性(如,,和在其他之中)。 通过使