Возможно, самое простое - объявить класс-обертку и внедрить этот класс. Как создание следующего компонента:
public class ServletWebServerFactoryWrapper {
private ServletWebServerFactory servletWebServerFactory;
public ServletWebServerFactoryWrapper(ServletWebServerFactory servletWebServerFactory){
this.servletWebServerFactory = servletWebServerFactory;
}
public static ServletWebServerFactoryWrapper getWrapper(ServletWebServerFactory servletWebServerFactory){
return new ServletWebServerFactoryWrapper(servletWebServerFactory);
}
public ServletWebServerFactory getFactory(){
return servletWebServerFactory;
}
}
и вернуть его в свой код:
@Bean
public ServletWebServerFactoryWrapper servletContainer() {
if(sslEnabled) {
TomcatServletWebServerFactory tomcat = new TomcatServletWebServerFactory() {
@Override
protected void postProcessContext(Context context) {
SecurityConstraint securityConstraint = new SecurityConstraint();
securityConstraint.setUserConstraint("CONFIDENTIAL");
SecurityCollection collection = new SecurityCollection();
collection.addPattern("/*");
securityConstraint.addCollection(collection);
context.addConstraint(securityConstraint);
}
};
tomcat.addAdditionalTomcatConnectors(redirectConnector());
return ServletWebServerFactoryWrapper.getWrapper(tomcat);
}
return ServletWebServerFactoryWrapper.getWrapper(null);
}
Я не знаю, можете ли вы использовать Optional<ServletWebServerFactory>
(Java 8), но вы можете попробовать, это должно быть довольно эквивалентно этому. Ваш метод должен стать следующим:
@Bean
public Optional<ServletWebServerFactory> servletContainer() {
if(sslEnabled) {
TomcatServletWebServerFactory tomcat = new TomcatServletWebServerFactory() {
@Override
protected void postProcessContext(Context context) {
SecurityConstraint securityConstraint = new SecurityConstraint();
securityConstraint.setUserConstraint("CONFIDENTIAL");
SecurityCollection collection = new SecurityCollection();
collection.addPattern("/*");
securityConstraint.addCollection(collection);
context.addConstraint(securityConstraint);
}
};
tomcat.addAdditionalTomcatConnectors(redirectConnector());
return Optional.of(tomcat);
}
return Optional.empty();
}
Помните, что эта последняя альтернатива работает только на Java 8 или выше.