Spring 使用 hibernate factory 提供的默認驗證器工廠。但是,我不想包含運算式語言依賴項。
此答案建議使用以下代碼避免使用默認工廠:
import javax.validation.Validation;
import javax.validation.Validator;
import org.hibernate.validator.messageinterpolation.ParameterMessageInterpolator;
private static final Validator VALIDATOR =
Validation.byDefaultProvider()
.configure()
.messageInterpolator(new ParameterMessageInterpolator())
.buildValidatorFactory()
.getValidator();
這作業得很好,當我不得不VALIDATOR的參考,但我不知道如何告訴春天,而不是使用上述的OptionalValidatorFactoryBean延伸LocalValidatorFactoryBean,我想填充與驗證Validation.buildDefaultValidatorFactory()基于從javadoc的LocalValidatorFactoryBean
總之,我如何替換 spring 的默認值Validation.buildDefaultValidatorFactory(),Validation.byDefaultProvider().configure().messageInterpolator(new ParameterMessageInterpolator()).buildValidatorFactory().getValidator()
以便我可以避免對運算式語言的依賴。
uj5u.com熱心網友回復:
嘗試查看配置 Bean 驗證提供程式以了解驗證提供程式機制的一些討論,例如Spring 驅動的方法驗證,然后將其作為默認方法驗證 bean 注入。
<bean class="org.springframework.validation.beanvalidation.MethodValidationPostProcessor">
<property name="validatorFactory" ref="myValidatorFactory"/>
</bean>
(我用 Spring 4.x 在 WebSphere Application Server 上做了這種事情,這里。)
uj5u.com熱心網友回復:
感謝 @dbreaux 的回答,我瀏覽了檔案并提出了這個解決方案:
@Bean
public LocalValidatorFactoryBean validator() {
LocalValidatorFactoryBean localValidatorFactoryBean = new LocalValidatorFactoryBean();
localValidatorFactoryBean.setMessageInterpolator(new ParameterMessageInterpolator());
return localValidatorFactoryBean;
}
我不再需要 Expression Language 依賴項,并且我的驗證正在使用 Hibernate Validator 5.2.5.Final。
但是,由于安全問題,我不得不升級6.0.22.Final并切換到以下與 @dbreaux 非常接近的版本。我還必須將@Validated 添加到@Controller。
@Bean
public MethodValidationPostProcessor methodValidationPostProcessor() {
MethodValidationPostProcessor bean = new MethodValidationPostProcessor();
bean.setValidator(Validation.byDefaultProvider()
.configure()
// We must use ParameterMessageInterpolator so that we do not need to add a dependency
// on Java Expression Language which is a potential security vulnerability.
// See https://securitylab.github.com/research/bean-validation-RCE/ for more info.
.messageInterpolator(new ParameterMessageInterpolator())
.buildValidatorFactory()
.getValidator());
return bean;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/380131.html
