Добавлена ​​поддержка HTTP для моего веб-приложения с сертификатом SSL.

1

Для поддержки HTTP я добавил в свое веб-приложение (Spring Boot 2.5.6v) приведенный ниже код, который имеет сертификат SSL для HTTPS.

@Bean
public ServletWebServerFactory servletContainer() {
    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 tomcat;
}

private Connector redirectConnector() {
    Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
    connector.setScheme("http");
    connector.setPort(8080);
    connector.setSecure(false);
    connector.setRedirectPort(8443);
    return connector;
}

Все, что я могу понять из приведенного выше кода, который я копирую, вставленного с внешнего сайта (который не имеет особого объяснения), заключается в том, что всякий раз, когда он получает запрос на порт 8080 (HTTP: // localhost: 8080), он перенаправляет запрос на Порт 8443 (HTTPS: // localhost: 8443). Я не очень уверен, использовать ли этот код и для производственного кода. В чем недостатки этого кода и какие все модификации можно сделать? Пожалуйста, также предоставьте документацию / объяснение, относящиеся к приведенному выше коду, чтобы я получил некоторую ясность в том, что я делаю.

0

Вы можете рассмотреть следующие ссылки для вашего запроса:

Spring Security - HTTP Как включить HTTPS в Java-приложении Spring Boot

Я думаю, что это может сработать, но вы также можете подумать о том, tomacat ajp connectorчто Spring-boot использует apache tomacatсервер для работы в вашей системе.

обратитесь к этому для получения дополнительной информации: Коннектор AJP

Просто включите AJP в версии Spring Boot 2.2.5.RELEASE. И добавьте это: ((AbstractAjpProtocol) ajpConnector.getProtocolHandler()).setSecretRequired(false); вы можете увидеть, где я использовал это в приведенном ниже коде

Демо-код для иллюстрации:

@Configuration
public class TomcatConfiguration {

    @Value("${tomcat.ajp.port}")
    int ajpPort;

    @Value("${tomcat.ajp.remoteauthentication}")
    String remoteAuthentication;

    @Value("${tomcat.ajp.enabled}")
    boolean tomcatAjpEnabled;

    @Bean
    public TomcatServletWebServerFactory servletContainer() {

        TomcatServletWebServerFactory tomcat = new TomcatServletWebServerFactory();
        if (tomcatAjpEnabled) {
            Connector ajpConnector = new Connector("AJP/1.3");
            ajpConnector.setPort(ajpPort);
            ajpConnector.setSecure(false);
            ajpConnector.setAllowTrace(false);
            ajpConnector.setScheme("http");
            ((AbstractAjpProtocol) ajpConnector.getProtocolHandler()).setSecretRequired(false);
            tomcat.addAdditionalTomcatConnectors(ajpConnector);
        }

        return tomcat;
    }

}

Также в application.propertiesфайл добавьте это:

server.port=8082
tomcat.ajp.port=9090
tomcat.ajp.remoteauthentication=false
tomcat.ajp.enabled=true
Новый участник
Pranay Srivastava is a new contributor to this site. Take care in asking for clarification, commenting, and answering. Check out our Code of Conduct.