java - spring中如何动态禁用特定API?

标签 java spring annotations

我有一个标志 DISABLE_FLAG,我想用它来控制不同 Controller 中的多个特定 API。

@RestController
public final class Controller1 {
    @RequestMapping(value = "/foo1", method = RequestMethod.POST)
    public String foo1()
}
@RestController
public final class Controller2 {
    @RequestMapping(value = "/foo2", method = RequestMethod.POST)
    public String foo2()
}

我可以使用拦截器来处理所有的网址。有没有像注释这样简单的方法来做到这一点?

最佳答案

你可以使用 AOP 来做类似的事情。

创建您自己的注释...

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface Maybe { }

以及相应的方面...

@Aspect
public class MaybeAspect {

  @Pointcut("@annotation(com.example.Maybe)")
  public void callMeMaybe() {}

  @Around("callMeMaybe()")
  public Object around(ProceedingJoinPoint joinPoint) throws Throwable {
    // do your logic here..
    if(DISABLE_FOO) {
      // do nothing ? throw exception?
      // return null;
      throw new IllegalStateException();
    } else {
      // process the request normally
      return joinPoint.proceed();
    }
  }
}

关于java - spring中如何动态禁用特定API?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58773615/

相关文章:

Java - 将 Unix 纪元时间转换为日期

java - 调试hibernate注解,能输出hbm文件吗?

java - 在 context.getBundle(0).adapt(FrameworkWiring.class).getDependencyClosure(bundles) 上使用 Maven 编译包时出错

java - 配置文件中ElasticSearch Java API TransportClient地址

java - Spring加载JSON文件并通过requestMapping返回

java - 在 Oracle 数据库上持久化具有非自动增量 id 的实体时抛出 DataRetrievalFailureException

java - RedisTemplate execute() 和 opsFpr*() 的不同使用

java - spring-cassandra UDT数据插入

ios - map 上的 Swift 注释作为按钮

Java:从 Json 文件中删除内容