Jea*_*ôté 5 java error-handling filter playframework
我正在尝试从 Play 2.6 迁移到 Play 2.7。
在我的代码中,我有一个自定义过滤器,它将特定标题添加到 CORS 的结果中。这里没什么特别的。
在 Play 2.7 之前,我通过 Action 组合添加了标题,但由于我们不再能够轻松访问结果(只有请求),我发现使用过滤器会更容易(并且我希望在所有调用中都使用它,所以这说得通)。
我的问题是在 Play 2.7 中,当我的代码中出现异常时,我的自定义过滤器会被调用,但不会被应用。它适用于每个不在 ErrorHandler 中的调用。这使得前端无法使用结果,因为它不包含所需的标头。
所以我的问题是:即使出现错误/异常,我们如何确保调用和应用过滤器?
这是过滤器:
@Singleton
public class AccessHeaderFilter extends EssentialFilter {
private final Executor exec;
private final Config configuration;
@Inject
public AccessHeaderFilter(Executor exec, Config configuration) {
this.exec = exec;
this.configuration = configuration;
}
@Override
public EssentialAction apply(EssentialAction next) {
return EssentialAction.of(request ->
next.apply(request)
.map(result ->
result.withHeader(Http.HeaderNames.ACCESS_CONTROL_ALLOW_ORIGIN, configuration.getString("front-end.url"))
.withHeader(Http.HeaderNames.ACCESS_CONTROL_REQUEST_METHOD, "GET, POST, PUT, DELETE, OPTIONS")
.withHeader(Http.HeaderNames.ACCESS_CONTROL_ALLOW_HEADERS, "Cache-Control, X-Requested-With, Accept, Content-Type")
.withHeader(Http.HeaderNames.ACCESS_CONTROL_ALLOW_CREDENTIALS, "true")
.withHeader(Http.HeaderNames.CACHE_CONTROL, "public"),
exec)
);
}
}
Run Code Online (Sandbox Code Playgroud)
真实场景:用户尝试创建一个名称已经被占用的资源。我抛出一个 FeedbackException 它将返回一个带有元异常详细信息的 http 200,前端使用它来显示一个有趣的弹出窗口。在 Play 2.7 之前,响应将包含标头。现在没有了。
知道如何确保即使在触发错误处理程序时也应用过滤器吗?
| 归档时间: |
|
| 查看次数: |
133 次 |
| 最近记录: |