跨域
@EnableCORS 注解支持
在 Tio-Boot 项目中,如果你想让 Controller
的 Action
支持跨域请求 (CORS),可以通过在类或方法上添加 @EnableCORS
注解。
- 类级别跨域支持: 在 Controller 类上添加
@EnableCORS
注解,这样类下的所有方法都会自动支持 CORS。 - 方法级别跨域支持: 在具体的 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