我正在将play框架2.6.7与akka结合使用。对于字段验证,我使用hibernate验证器。我确实有使用hibernate验证器
的问题当我调用validator.validate(..)时,我确实得到了一个setContextClassloader SecurityException(见下文)。 我被绕过"将调用包装在executionContext中的问题如下:
ExecutionContext executionContext = actorSystem.dispatchers().lookup(AKKA_DEFAULT_DISPATCHER);
executionContext.execute(() -> {
Set<ConstraintViolation<MyObject>> violations = validator.validate(object);
..
});
对于表单验证,我使用/调用form.bindFromRequest()方法并仍然得到相同的安全性异常错误。
我尝试使用hibernate-validator 5.4.x以及6.0.x。
我做错了什么? 安全例外的根本原因是什么? 我怎么能摆脱它?
play.api.http.HttpErrorHandlerExceptions$$anon$1: Execution exception[[SecurityException: setContextClassLoader]]
at play.api.http.HttpErrorHandlerExceptions$.throwableToUsefulException(HttpErrorHandler.scala:255)
at play.api.http.DefaultHttpErrorHandler.onServerError(HttpErrorHandler.scala:180)
at dd.cms.ErrorHandler.dd$cms$ErrorHandler$$super$onServerError(ErrorHandler.scala:181)
at dd.cms.ErrorHandler$$anonfun$onServerError$1.apply(ErrorHandler.scala:188)
at dd.cms.ErrorHandler$$anonfun$onServerError$1.apply(ErrorHandler.scala:143)
Caused by: java.lang.SecurityException: setContextClassLoader
at java.util.concurrent.ForkJoinWorkerThread$InnocuousForkJoinWorkerThread.setContextClassLoader(ForkJoinWorkerThread.java:244)
at play.api.inject.ContextClassLoaderInjector.withContext(Injector.scala:125)
at play.api.inject.ContextClassLoaderInjector.instanceOf(Injector.scala:118)
at play.inject.DelegateInjector.instanceOf(DelegateInjector.java:22)
at play.data.validation.DefaultConstraintValidatorFactory.getInstance(DefaultConstraintValidatorFactory.java:26)