如何将CORS标头设置为内部服务器错误响应?

易卜拉比

我有一个带有resteasy提供的REST接口的Java应用程序服务器,并且下面有CORS过滤器

@Provider
public class CORSFilter implements ContainerResponseFilter {

    public void filter(ContainerRequestContext cReq, ContainerResponseContext cResp) {
        cResp.getHeaders().add("Access-Control-Allow-Origin", "*");
        cResp.getHeaders().add("Access-Control-Allow-Headers", "origin, content-type, accept, authorization, auth-token");
        cResp.getHeaders().add("Access-Control-Allow-Credentials", "true");
        cResp.getHeaders().add("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS, HEAD");
        cResp.getHeaders().add("Access-Control-Max-Age", "1209600");
    }

}

所有请求均以CORS标头返回:

OPTIONS 200 OK
Access-Control-Allow-Credentials:"true"
Access-Control-Allow-Headers:"origin, content-type, accept, authorization, auth-token"
Access-Control-Allow-Methods:"GET, POST, PUT, DELETE, OPTIONS, HEAD"
Access-Control-Allow-Origin:"*"
Access-Control-Max-Age:"1209600"
Allow:"HEAD, GET, OPTIONS"
Connection:"keep-alive"
Content-Length:"18"
Content-Type:"text/plain"
Date:"Thu, 15 Jan 2015 15:23:01 GMT"
Server:"WildFly/8"

除非当我有一个内部异常返回错误代码500时:

GET 500 Internal Server Error
Connection:"keep-alive"
Content-Length:"8228"
Content-Type:"text/html; charset=UTF-8"
Date:"Thu, 15 Jan 2015 15:23:01 GMT"

如何使500个响应包含这些标题?

勒弗洛

使用ExceptionMapper

@Provider
public class CorsExceptionMapper implements ExceptionMapper<Exception> {

    @Override
    public Response toResponse(Exception ex) {
        ResponseBuilder responseBuilder = Response.serverError();
        responseBuilder.header("Access-Control-Allow-Origin", "*");
        responseBuilder.header("Access-Control-Allow-Headers", "origin, content-type, accept, authorization, auth-token");
        responseBuilder.header("Access-Control-Allow-Credentials", "true");
        responseBuilder.header("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS, HEAD");
        responseBuilder.header("Access-Control-Max-Age", "1209600");
        return responseBuilder.build();
    }

}

为了避免重复标题,您应该使用:

cResp.getHeaders().putSingle() 

ContainerResponseFilter

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

服务器如何设置HTTP响应标头?

如何在无服务器中为自定义标头提供CORS?

为什么我的 Apache2 .htaccess 文件 CORS 标头导致 500 内部服务器错误?

服务器响应的.NET标头

使用akka http,如何将请求标头注入服务器中的传入路由?

JavaFX:如何将侦听器设置为TabPane标头的onClick事件

JavaFX:如何将侦听器设置为TabPane标头的onClick事件

如何将标头设置为$ .get()或$ .post()函数

发送HTTP标头后服务器无法设置状态-Web API CORS

发送标头后无法设置标头。:Raspbian Web服务器上的Sendgrid邮件响应

是否可以在主叫方服务器上为CORS添加标头?

在服务器上启用的CORS仍然收到标头错误

尽管在Flask中设置了响应标头,但CORS错误

如何将jwt令牌存储在localStorage中,并使用express中的标头将其发送回服务器?

Jasper:如何将数据源中的 HTTP 标头从 Jaspersoft Studio 保留到服务器?

Go上服务器的CORS标头问题

加载资源失败:服务器响应状态为 500(内部服务器错误)

PHPmailer:加载资源失败:服务器响应状态为 500(内部服务器错误)

如何将python变量编码为URL和Web服务器响应?

如何将单引号的服务器响应解析为python 3对象?

如何使用graphql-kotlin在Spring Boot服务器中添加CORS标头?

IIS之后的Kestrel的“服务器”响应标头

如何将Linux服务器设置为路由器

为nextjs默认服务器上的静态文件设置缓存控制标头

如何从服务器响应角度2中读取内容处置标头

如何让Kamailio将`Record-Route`标头设置为内部呼叫的内部IP?

如何将登录页面设置为 AD 联合服务器中的主路径?

如何将MySQL服务器时区设置为UTC?

如何将Apollo GraphQL服务器设置为接受对象作为突变变量?