`
huangyongxing310
  • 浏览: 494722 次
  • 性别: Icon_minigender_1
  • 来自: 广州
文章分类
社区版块
存档分类
最新评论

Spring-boot中Http与Https兼容例子

阅读更多
Spring-boot中Http与Https兼容例子


1.证书生成参考:http://huangyongxing310.iteye.com/blog/2352693


application.properties

#Server
server.port=8090

#LOGGING
logging.pattern.level=INFO

#server.port:8443
#server.ssl.key-store: classpath:keystore.p12
##server.ssl.key-store-password: aqjcpt
#server.ssl.key-store-password:123456
#server.ssl.keyStoreType: PKCS12
#server.ssl.keyAlias: tomcat


package com.cesmart;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.ComponentScan;

@EnableAutoConfiguration
@ComponentScan(basePackages = "com.cesmart") // 扫描那些包得到bean.@ComponentScan({"com.teradata.notification","com.teradata.dal"})
//@EnableSwagger2             //启动swagger注解
public class Application {
	public static void main(String[] args) {
		ApplicationContext applicationContext = SpringApplication.run(Application.class, args);
	}
}



package com.cesmart.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import com.google.common.base.Predicates;

import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;

@Configuration//定义为spring boot 的配置文件
@EnableSwagger2//启动swagger注解
public class Swagger2 {
	public static final String SWAGGER_SCAN_BASE_PACKAGE = "com.cesmart.controller";

	@Bean(value="createRestApi")
    public Docket createRestApi() {
        return new Docket(DocumentationType.SWAGGER_2)
        		.groupName("test1")
        		.pathMapping("/")
                .apiInfo(apiInfo())
                .select()
                .apis(RequestHandlerSelectors.basePackage(SWAGGER_SCAN_BASE_PACKAGE))
               .paths(Predicates.or(PathSelectors.regex("/*/.*")))
                .build();

        //groupName,分组名字
        //pathMapping,映射路径(会加到URL前面组成新的路径,如:"/xing/WebTest/webTest",(pathMapping("/xing")))
        //apiInfo,API信息描述
        //select, 选择那些路径和api会生成document
        //apis,扫描那些包,RequestHandlerSelectors.any()表示对所有api进行监控
        //paths,匹配那些路径,PathSelectors.any()表示所有路径,
    }

    @Bean(value="createRestApi2")
    public Docket createRestApi2() {
        return new Docket(DocumentationType.SWAGGER_2)
        		.groupName("test2")
        		.pathMapping("/")
                .apiInfo(apiInfo2())
                .select()
                .apis(RequestHandlerSelectors.basePackage(SWAGGER_SCAN_BASE_PACKAGE))
               .paths(Predicates.or(PathSelectors.regex("/*/.*")))
                .build();
    }


    private ApiInfo apiInfo() {
        return new ApiInfoBuilder()
                .title("Spring Boot中使用Swagger2构建RESTful APIs")
                .description("更多Spring Boot相关文章请关注:http://blog.didispace.com/")
                .termsOfServiceUrl("http://blog.didispace2.com/")
                .contact("程序猿DD")
                .version("1.0")
                .license("license")
                .licenseUrl("licenseUrl")
                .build();

        	//title,标题,在页面顶部显示
        	//description,描述,在页面顶部显示
        	//termsOfServiceUrl,
        	//contact,显示“Created by + contact”,在页面顶部显示
	        //version,API版本,,在页面顶部显示
	        //license,版权
    }

    private ApiInfo apiInfo2() {
        return new ApiInfoBuilder()
                .title("Spring Boot中使用Swagger2构建RESTful APIs")
                .description("更多Spring Boot相关文章请关注:http://blog.didispace.com/")
                .termsOfServiceUrl("http://blog.didispace2.com/")
                .contact("程序猿DD")
                .version("1.0")
                .license("license")
                .licenseUrl("licenseUrl")
                .build();
    }

}



package com.cesmart.config;

import java.io.File;

import org.apache.catalina.Context;
import org.apache.catalina.connector.Connector;
import org.apache.tomcat.util.descriptor.web.SecurityCollection;
import org.apache.tomcat.util.descriptor.web.SecurityConstraint;
import org.springframework.boot.context.embedded.ConfigurableEmbeddedServletContainer;
import org.springframework.boot.context.embedded.EmbeddedServletContainerCustomizer;
import org.springframework.boot.context.embedded.EmbeddedServletContainerFactory;
import org.springframework.boot.context.embedded.Ssl;
import org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainerFactory;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;

import com.google.common.base.Predicates;

import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;

@Configuration // 定义为spring boot 的配置文件

public class WebConfig {

	// Http访问的URL
	private static final String HTTP_URL_PATTERNS[] = { "/HttpTest/*" };

	// Https访问的URL
	private static final String HTTPS_URL_PATTERNS[] = { "/HttpsTest/*" };

	@Bean
	public EmbeddedServletContainerCustomizer containerCustomizer() {
		return new EmbeddedServletContainerCustomizer() {
			@Override
			public void customize(ConfigurableEmbeddedServletContainer container) {
				Ssl ssl = new Ssl();
				// Server.jks中包含服务器私钥和证书
				ssl.setKeyStore("classpath:keystore.p12");
				ssl.setKeyStorePassword("123456");
				container.setSsl(ssl);
				container.setPort(8443);
			}
		};
	}

	@Bean
	public EmbeddedServletContainerFactory servletContainerFactory() {
		TomcatEmbeddedServletContainerFactory factory = new TomcatEmbeddedServletContainerFactory() {
			@Override
			protected void postProcessContext(Context context) {
				// SecurityConstraint必须存在,可以通过其为不同的URL设置不同的重定向策略。
				SecurityConstraint securityConstraint = new SecurityConstraint();
				securityConstraint.setUserConstraint("CONFIDENTIAL");
				SecurityCollection collection = new SecurityCollection();
				for (String pattern : HTTPS_URL_PATTERNS) {
					collection.addPattern(pattern);
				}
				securityConstraint.addCollection(collection);
				context.addConstraint(securityConstraint);

				// ==============
				SecurityConstraint securityConstraintHttp = new SecurityConstraint();
				securityConstraintHttp.setUserConstraint("NONE");
				SecurityCollection collectionHttp = new SecurityCollection();
				for (String pattern : HTTP_URL_PATTERNS) {
					collectionHttp.addPattern(pattern);
				}
				securityConstraintHttp.addCollection(collectionHttp);
				context.addConstraint(securityConstraintHttp);

			}
		};
		factory.addAdditionalTomcatConnectors(createHttpConnector());
		return factory;
	}

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

}



package com.cesmart.controller;

import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;

@RestController
@Api(value = "HttpsTest", description = "有关于HttpsTest操作")
@RequestMapping(value = "/HttpsTest")
// 用在类上,说明该类的作用
// value,显示在类中的说明
// description,类中的说明
// 显示形式:“value:description”,如上面显示为"WebTest:有关于Swagger2操作"
public class HttpsTest {
	@ApiOperation(value = "接口说明", notes = "接口发布说明", response = String.class)
	// 用在方法上,说明方法的作用
	// 显示在方法说明中,显示notes
	// response,接口返回参数类型
	// value = "接口说明",
	// notes = "接口发布说明"
	@ApiImplicitParams({
			@ApiImplicitParam(paramType = "path", required = true, name = "test", dataType = "String", value = "456"),
			@ApiImplicitParam(paramType = "path", required = true, name = "test2", dataType = "String", value = "789") })
	// @ApiImplicitParam,表示一个参数的描述,与请求参数有关系
	// paramType,参数放在哪个地方
	// required,参数是否必须传
	// name,参数名
	// dataType,参数类型(描述)
	// value,参数的意思(描述)
	@ApiParam
	@RequestMapping(value = "/HttpsTestGet/{test}/{test2}", produces = "text/plain;charset=UTF-8", method = RequestMethod.GET)
	public String HttpsTestGet(@PathVariable("test") String test, @PathVariable("test2") String test2) {
		System.out.println("HttpTest");
		System.out.println("test == " + test);
		System.out.println("test2 == " + test2);
		return "HttpTest";
	}

	@ApiOperation(value = "接口说明", notes = "接口发布说明", response = String.class)
	@ApiImplicitParams({
			@ApiImplicitParam(paramType = "query", required = true, name = "test", dataType = "String", value = "456", defaultValue = "test"),
			@ApiImplicitParam(paramType = "query", required = true, name = "test2", dataType = "String", value = "789", defaultValue = "test2") })
	@RequestMapping(value = "/HttpsTestPost", produces = "text/plain;charset=UTF-8", method = RequestMethod.POST)
	public String HttpsTestPost(String test, String test2) {
		System.out.println("webTest");
		System.out.println("test == " + test);
		System.out.println("test2 == " + test2);
		return "webTest";
	}

}



package com.cesmart.controller;

import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;

@RestController
@Api(value = "HttpTest", description = "有关于HttpTest操作")
@RequestMapping(value = "/HttpTest")
// 用在类上,说明该类的作用
// value,显示在类中的说明
// description,类中的说明
// 显示形式:“value:description”,如上面显示为"WebTest:有关于Swagger2操作"
public class HttpTest {
	@ApiOperation(value = "接口说明", notes = "接口发布说明", response = String.class)
	// 用在方法上,说明方法的作用
	// 显示在方法说明中,显示notes
	// response,接口返回参数类型
	// value = "接口说明",
	// notes = "接口发布说明"
	@ApiImplicitParams({
			@ApiImplicitParam(paramType = "path", required = true, name = "test", dataType = "String", value = "456"),
			@ApiImplicitParam(paramType = "path", required = true, name = "test2", dataType = "String", value = "789") })
	// @ApiImplicitParam,表示一个参数的描述,与请求参数有关系
	// paramType,参数放在哪个地方
	// required,参数是否必须传
	// name,参数名
	// dataType,参数类型(描述)
	// value,参数的意思(描述)
	@ApiParam
	@RequestMapping(value = "/HttpTestGet/{test}/{test2}", produces = "text/plain;charset=UTF-8", method = RequestMethod.GET)
	public String HttpTestGet(@PathVariable("test") String test, @PathVariable("test2") String test2) {
		System.out.println("HttpTest");
		System.out.println("test == " + test);
		System.out.println("test2 == " + test2);
		return "HttpTest";
	}

	@ApiOperation(value = "接口说明", notes = "接口发布说明", response = String.class)
	@ApiImplicitParams({
			@ApiImplicitParam(paramType = "query", required = true, name = "test", dataType = "String", value = "456", defaultValue = "test"),
			@ApiImplicitParam(paramType = "query", required = true, name = "test2", dataType = "String", value = "789", defaultValue = "test2") })
	@RequestMapping(value = "/HttpTestPost", produces = "text/plain;charset=UTF-8", method = RequestMethod.POST)
	public String HttpTestPost(String test, String test2) {
		System.out.println("webTest");
		System.out.println("test == " + test);
		System.out.println("test2 == " + test2);
		return "webTest";
	}

}



参考(在Spring Boot中使用Https(应用参考这个)):http://www.cnblogs.com/xinzhao/p/4952856.html
参考(Spring Boot基于Tomcat的HTTP和HTTPS协议配置,这个好):http://kchu.me/2015/08/19/Spring-Boot%E5%9F%BA%E4%BA%8ETomcat%E7%9A%84HTTP%E5%92%8CHTTPS%E5%8D%8F%E8%AE%AE%E9%85%8D%E7%BD%AE/
分享到:
评论

相关推荐

    spring-boot-starter-parent-1.5.13.RELEASE.zip

    标题 "spring-boot-starter-parent-1.5.13.RELEASE.zip" 提供的信息表明,这是一个与Spring Boot相关的压缩包,具体来说是Spring Boot的起步依赖(Starter Parent)的一个版本,版本号为1.5.13.RELEASE。Spring Boot...

    springboot2.0.x+dubbo-spring-boot-starter

    标题 "springboot2.0.x+dubbo-spring-boot-starter" 涉及的是将流行的微服务框架 Dubbo 集成到 Spring Boot 2.0.x 的项目实践中。这个集成使得开发者能够利用 Spring Boot 的便利性和 Dubbo 的高性能远程服务调用...

    spring-boot-webservice例子

    在标签中,我们看到"spring boot spring boot spring",这可能意味着项目中涉及了多个Spring Boot组件或者其他Spring框架的集成,例如Spring MVC或Spring Data,它们可以帮助处理HTTP请求、数据库交互等。...

    payment-spring-boot-samples:付款Spring Boot样本

    移动支付 Payment Spring Boot 示例项目,基于最新版本,向下兼容。 请给 Star以鼓励,谢谢。 说明 Maven 最新中央仓库坐标: <groupId>cn.felord</groupId> <artifactId>payment-spring-boot-starter <version>...

    Spring-boot web项目实例

    1. **起步依赖(Starter Dependencies)**:Spring Boot通过“起步依赖”管理了各种常用库的版本,这使得开发者无需关心版本兼容性问题,只需在`pom.xml`或`build.gradle`文件中引入相应的依赖即可。 2. **嵌入式...

    spring-boot 整合 jsp jdk1.6版本 可用

    在本文中,我们将深入探讨如何在使用JDK 1.6版本的环境下,将Spring Boot与JSP(JavaServer Pages)进行有效整合。Spring Boot以其便捷的“开箱即用”特性深受开发者喜爱,但默认情况下它并不直接支持JSP视图解析。...

    spring-boot项目示例学习demo-66套.zip

    该项目已成功集成 actuator(监控)、admin(可视化监控)、logback(日志)、aopLog(通过AOP记录web请求日志)、统一异常处理(json级别和页面级别...本 demo 里会尽量避免这种不兼容的地方,但还是建议尽量保证 5.7 版本以上)

    pit1_spring boot之 maven install 报错[Maven]1

    在Spring Boot项目中,`maven install` 是一个常见的构建步骤,它用于将项目打包成可部署的格式,如JAR或WAR,并将其安装到本地Maven仓库。然而,当出现错误 `[ERROR] Failed to execute goal org.springframework....

    spring-ws源码,例子,及reference

    同时,例子还可能展示如何与其他Spring组件(如Spring Boot、Spring MVC等)集成,实现完整的Web服务解决方案。 **Spring-WS Reference**: 官方参考文档是了解Spring-WS功能和最佳实践的重要资源。它详尽地解释了...

    springcloud 整合nacos 配置文件,注册

    确保你使用的是与你的Spring Boot和Spring Cloud兼容的Nacos版本。 接下来,我们关注`logback.xml`文件。Spring Cloud Nacos允许我们使用Nacos作为日志配置中心。在`logback.xml`中,你可以配置一个`...

    spring boot 小例子

    在这个"spring boot小例子"中,我们看到项目被构建为一个 WAR 包,这表明它是为在外部应用服务器(如 Apache Tomcat)上运行而设计的。通常,Spring Boot 提供两种打包方式:jar 和 war。jar 包适合独立运行,内嵌了...

    spring-integration-http-demo:spring-integration-http-demo

    7. **Spring Boot集成**:由于Spring Integration与Spring Boot的良好兼容性,这个示例可能也展示了如何在Spring Boot应用中配置和使用Spring Integration HTTP组件。Spring Boot简化了依赖管理和自动配置,使得搭建...

    Spring Boot的Vue-js前端使用指南.docx

    在实际项目中,通常会使用Webpack或其他构建工具来编译Vue.js组件,并将它们与Spring Boot应用结合。这包括使用Babel将ES6代码转换为浏览器兼容的JavaScript,以及使用Vue Router管理路由,Vuex处理状态管理等。然而...

    Spring与OSGI整合 计算器例子(转) +附整合代码和spring-osgi核心jar

    标题中的“Spring与OSGI整合 计算器例子(转)”指的是将Spring框架与OSGI(Open Services Gateway Initiative)模块化系统相结合,通过一个计算器应用的例子来阐述整合过程。OSGI是一种Java平台上的动态模块系统,它...

    SpringWebSocket-master.zip

    Spring Boot的WebSocket支持可以通过`spring-websocket`模块添加到项目中。开发者通常会定义一个`WebSocketConfig`类,配置WebSocket端点和消息处理处理器。例如: ```java @Configuration @...

    springboot 基于spring-kafka动态创建kafka消费者

    在Spring Boot应用中,我们可以利用Spring Kafka框架来与Apache Kafka进行集成,实现高效的消息传递。本文将详细探讨如何在Spring Boot项目中基于Spring Kafka动态创建Kafka消费者。 首先,了解Kafka基本概念:...

    Spring Boot整合EhCache的步骤详解

    在本文中,我们将深入探讨如何将EhCache与Spring Boot集成,以便在应用程序中实现高效的数据缓存。EhCache是一个流行的Java缓存框架,它以其高性能和轻量级特性而受到广泛使用,尤其在Hibernate中作为默认的...

    idea+springboot+springloaded热部署例子

    5. 如果遇到热部署问题,如更新不生效,检查IDE设置,确保Idea启用了自动编译,并确认项目的JDK版本与Spring Boot支持的版本兼容。 通过以上步骤,你就可以体验到Spring Boot结合SpringLoaded带来的高效开发流程。...

    spring-boot-ws:Web 服务的基本模板

    此外,Spring Boot WS还提供了丰富的功能,如安全控制、错误处理、消息转换、以及与其他Spring框架的深度集成,如Spring Data JPA,使得在实际项目中可以方便地构建复杂的Web服务系统。 总结,Spring Boot WS为Java...

    Java分布式开发spring+jta+jotm

    它与各种数据库和JMS提供者兼容,为Java应用提供了强大的事务管理能力。JOTM可以在Spring框架中无缝集成,通过Spring的PlatformTransactionManager接口来配置和使用。 **Spring 配置JTA和JOTM** 在Spring中使用JTA...

Global site tag (gtag.js) - Google Analytics