spring - 我的 Spring Boot 应用程序能否仅在某些 @RequestMappings 上运行 HTTPS?

标签 spring spring-boot ssl https

我正在开发一个用于智能家居的 Spring 应用程序。我得到了向 Spring 应用程序发送数据的微 Controller ,但由于空间和处理速度不够,我无法在它们上实现 SSL。

在客户端,我想使用 HTTPS,因为客户端运行在 Android 上。

我能否将某些请求映射到 HTTP 而将其他请求映射到 HTTPS?

最佳答案

我们不能从 spring boot 应用程序打开两个端口,一个在 443 上,另一个在 80 上。这样,在 https 上它监听 443,在 http 上监听 80。所以在你的应用程序中,你可以在 url 上配置 http 以使用 80 port 和 https 使用 443 端口。

我们可以通过更改 application.properties 来做到这一点:

#Https settings
server.port=443
server.ssl.key-store=classpath:keystore.jks
server.ssl.key-store-password = secret
server.ssl.key-password = secret
#Http setting
server.http.port=80

我给出了一个使用 Undertow 服务器的示例,您可以在任何应用程序服务器(tomcat 等)上执行此操作:

@SpringBootApplication
public class Boot {

    @Value("${server.http.port:0}")
    private Integer httpPort;

    public static void main(String[] args) throws Exception {
        SpringApplication.run(Boot.class, args);
    }

    @Bean
    public UndertowEmbeddedServletContainerFactory embeddedServletContainerFactory() {
        UndertowEmbeddedServletContainerFactory factory = new UndertowEmbeddedServletContainerFactory();
        factory.addBuilderCustomizers(new UndertowBuilderCustomizer() {

            public void customize(Builder builder) {
                // worker options
                builder.setWorkerThreads(500);
                builder.setWorkerOption(Options.TCP_NODELAY, true);

                // io options
                builder.setIoThreads(Runtime.getRuntime().availableProcessors() * 2);

                // socket options
                builder.setSocketOption(Options.BACKLOG, 10000);
                builder.setSocketOption(Options.TCP_NODELAY, true);
                builder.setSocketOption(Options.REUSE_ADDRESSES, true);

                // server options
                builder.setServerOption(UndertowOptions.ALWAYS_SET_KEEP_ALIVE, false);
                builder.setServerOption(UndertowOptions.ALWAYS_SET_DATE, true);
                builder.setServerOption(UndertowOptions.RECORD_REQUEST_START_TIME, false);

                // Done to keep both http and https port open at production
                if (httpPort > 0)
                    builder.addHttpListener(httpPort, "0.0.0.0");
            }

        });
        return factory;
    }

}

关于spring - 我的 Spring Boot 应用程序能否仅在某些 @RequestMappings 上运行 HTTPS?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50613018/

相关文章:

返回 JAXB 带注释的对象时,具有非标准的 Spring Boot RequestMapping 会产生返回 406 错误的值

php - Symfony2 重定向循环

java - 连接到 mysql 的实例来自 java 客户端应用程序

java - 未检测到登录页面 spring boot

java - 为什么没有将 javabean 功能内置到根 JAVA 对象中?

java - jdo/OSGi : error building JDO PersistenceManagerFactory after bundle update

Java消息对象枚举Spring集成错误

java - 从 Java 8 迁移到 Java 11 后出现 InaccessibleObjectException

c# - TCPListener 上的 SSL

java - Spring Boot + JPA+Thymeleaf+Hibernate 应用多重验证注解