SpringBoot写Https接口

原文链接:

第11课:springboot 实现https添加证书内容做https接口部署_manyu7741的博客-CSDN博客

简介

单个项目中如果需要做https的项目部署,一般可能直接通过nginx配置的https的请求负载到对应的接口方法上则访问方法的时间实现https功能的实现.如果只是简单的项目应用不想配置nginx还可以通过springboot+配置https证书内容来实现具体的功能;

https 证书生成

keytool生成tomcat证书 tomcat7之后支持 jks和pfx两种

1. 生成pkcs12 格式jks证书

keytool -genkeypair -alias dongli -keystore khy.jks -keypass khanyu -storetype pkcs12  -storepass khanyu  -keyalg RSA -keysize 2048 -validity 365

2. JKS证书转化成PXF格式
 

 keytool -importkeystore -srckeystore D:\khy.jks -destkeystore D:\khy.pfx -srcstoretype JKS -deststoretype PKCS12

然后输入对应的密码 khanyu

在这里插入图片描述

PFX格式证书转换成 JKS

 keytool -importkeystore -srckeystore D:\khy.pfx -destkeystore D:\khy.jks  -srcstoretype PKCS12 -deststoretype JKS

在这里插入图片描述

 

项目代码

1.pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.khy.boot</groupId>
  <artifactId>boot-https</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  
   <parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>1.5.4.RELEASE</version>
	</parent>
	
     <properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
		<java.version>1.8</java.version>
		<!--含有多个main 需要指定某一个启动class类 -->
		<start-class>com.khy.MainApplication</start-class>
	</properties>
	
	 <dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency> 
		
		<dependency>
			<groupId>com.alibaba</groupId>
			<artifactId>fastjson</artifactId>
			<version>1.2.6</version>
		</dependency>
		<dependency>
			<groupId>org.apache.commons</groupId>
			<artifactId>commons-lang3</artifactId>
			<version>3.4</version>
		</dependency>
		<dependency>
			<groupId>commons-collections</groupId>
			<artifactId>commons-collections</artifactId>
		</dependency>
		<dependency>
			<groupId>org.apache.httpcomponents</groupId>
			<artifactId>httpclient</artifactId>
			<version>4.5.2</version>
		</dependency>
  </dependencies>
  
	<build>
	    <plugins>
	        <plugin>
	            <groupId>org.springframework.boot</groupId>
	            <artifactId>spring-boot-maven-plugin</artifactId>
	        </plugin>
	    </plugins>
	</build>
</project>

2.application.properties

在这里插入图片描述

 三种证书的文件类型都是可以的;

3 TomcatConfig

@Configuration
public class TomcatConfig{
	  @Bean
	  public EmbeddedServletContainerFactory servletContainer() {

	     TomcatEmbeddedServletContainerFactory tomcat = new TomcatEmbeddedServletContainerFactory() {

	        @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(initiateHttpConnector());
	    return tomcat;
	  }

	  private Connector initiateHttpConnector() {
	    Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
	    connector.setScheme("http");
	    connector.setPort(8085); //这个标识的是http的端口
	    connector.setSecure(false);
	    connector.setRedirectPort(8084);//这个标识的是https的端口内容;
	    return connector;
	  }
}
@Configuration
public class TomcatHttpConfig {

	/**
	 * 配置内置的Servlet容器工厂为Tomcat
	 * @return
	 */
	@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);
			}
		};
		//添加配置信息,主要是Http的配置信息
		tomcat.addAdditionalTomcatConnectors(redirectConnector());
		return tomcat;
	}

	/**
	 * 配置一个Http连接信息
	 * @return
	 */
	private Connector redirectConnector() {
		Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
		connector.setScheme("http");
		connector.setPort(8088);
		connector.setSecure(false);
		connector.setRedirectPort(443);
		return connector;
	}
}
————————————————
版权声明:本文为CSDN博主「zuozewei」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/zuozewei/article/details/84727095

 

 4. HttpsController

@RestController
@RequestMapping("/https")
public class HttpsController {
 
	/**
	 * 模拟的http是的请求
	 * 如果是通过访问
	 * http://localhost:8085/https/find 这个会跳转到
	 * https://localhost:8084/https/find
	 * @author  khy
	 * @createTime 2020年6月21日上午11:17:10
	 * @return
	 */
	@RequestMapping("/find")
	public String find(){
		JSONObject json=new JSONObject();
		json.put("name","candy");
		json.put("age","10");
		json.put("money","1000");
		System.out.println("执行的完毕了");
		return json.toString();
	}
}

结论:
https://localhost:8084/https/find

或者当我们请求
http://localhost:8085/https/find 会跳转到
https://localhost:8084/https/find这个链接

同时还支持.pfx和.p12格式的数据


————————————————
版权声明:本文为CSDN博主「manyu7741」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_43812522/article/details/107159986

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个使用Spring Boot编单证接口的示例: 1. 创建Spring Boot项目 首先,您需要创建一个Spring Boot项目。您可以使用Spring Initializr(https://start.spring.io/)或使用Eclipse或IntelliJ IDEA等IDE创建项目。 2. 添加依赖 在pom.xml文件中添加以下依赖: ``` <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <dependency> <groupId>com.h2database</groupId> <artifactId>h2</artifactId> <scope>runtime</scope> </dependency> ``` 上面的依赖用于启用Spring Boot Web、Spring Data JPA和H2数据库。 3. 创建实体类 创建一个名为`单证`的实体类,其中包含单证的id、名称和创建时间: ``` @Entity @Table(name = "doc") public class Doc { @Id @GeneratedValue private Long id; private String name; private LocalDateTime createTime; // getters and setters } ``` 4. 创建Repository 创建一个名为`DocRepository`的接口,继承自`JpaRepository`,用于访问单证数据: ``` public interface DocRepository extends JpaRepository<Doc, Long> { } ``` 5. 创建Controller 创建一个名为`DocController`的类,用于处理单证请求: ``` @RestController @RequestMapping("/docs") public class DocController { @Autowired private DocRepository docRepository; @GetMapping("") public List<Doc> getDocs() { return docRepository.findAll(); } @PostMapping("") public Doc createDoc(@RequestBody Doc doc) { doc.setCreateTime(LocalDateTime.now()); return docRepository.save(doc); } } ``` 上面的代码使用`@RestController`注解将类标记为RESTful控制器,使用`@RequestMapping`注解指定请求路径为`/docs`。`@Autowired`注解用于自动注入`DocRepository`。`@GetMapping`注解用于处理GET请求,返回所有单证。`@PostMapping`注解用于处理POST请求,创建一个新的单证。 6. 运行应用程序 现在您可以运行应用程序并访问以下URL: - GET /docs:获取所有单证 - POST /docs:创建一个新的单证 例如,您可以使用curl命令创建一个新的单证: ``` curl -X POST \ http://localhost:8080/docs \ -H 'Content-Type: application/json' \ -d '{ "name": "Invoice", "createTime": "2022-01-01T00:00:00" }' ``` 然后使用curl命令获取所有单证: ``` curl http://localhost:8080/docs ``` 以上就是一个使用Spring Boot编单证接口的示例。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值