跨域

@EnableCORS 注解支持

在 Tio-Boot 项目中,如果你想让 ControllerAction 支持跨域请求 (CORS),可以通过在类或方法上添加 @EnableCORS 注解。

  1. 类级别跨域支持: 在 Controller 类上添加 @EnableCORS 注解,这样类下的所有方法都会自动支持 CORS。
  2. 方法级别跨域支持: 在具体的 Action 方法上添加 @EnableCORS 注解,以实现方法级别的 CORS 控制。

在内部,DefaultHttpRequestHandler.processDynamic 方法会自动处理 @EnableCORS 注解的逻辑,确保请求符合跨域要求。

使用示例:

import com.litongjava.annotation.EnableCORS;
import com.litongjava.tio.http.common.HttpRequest;
import com.litongjava.tio.http.common.HttpResponse;
import com.litongjava.annotation.RequestPath;
import com.litongjava.tio.http.server.util.Resps;

@RequestPath("/admin-api/system/captcha")
@EnableCORS // 应用于整个类
public class CaptchaController {

  @RequestPath("/check")
  public HttpResponse check(HttpRequest request) {
    HttpResponse response = Resps.json(request, "OK");
    return response;
  }
}

在上述代码中,CaptchaController 类中的所有方法都支持跨域请求。同时,@EnableCORS 也可以用于单独的方法来实现更细粒度的控制。

CORSUtils

如果你想要更高的性能,并且不希望每次都使用 @EnableCORS 注解,你可以直接使用 CORSUtils.enableCORS 方法来手动处理跨域逻辑。这样可以避免注解解析的开销,在高并发场景下具有一定的性能提升。

代码示例:

import com.litongjava.tio.http.server.util.CORSUtils;
import com.litongjava.tio.http.common.HttpRequest;
import com.litongjava.tio.http.common.HttpResponse;
import com.litongjava.tio.http.server.util.Resps;
import com.litongjava.tio.http.server.model.HttpCors;

HttpResponse response = Resps.json(request, "OK");
CORSUtils.enableCORS(response, new HttpCors()); // 手动启用跨域支持

通过调用 CORSUtils.enableCORS 方法,你可以在任意地方启用跨域支持,并根据需要定制 HttpCors 参数,如设置允许的源、方法和头部信息等。


Tio-Boot 中开启跨域请求

要在 Tio-Boot 中全局开启跨域请求,配置一个参数即可

server.http.response.cors.enable=true