SpringBoot学习笔记(二)

SpringBoot学习笔记(二)

  • SpringBoot基础配置
    • @SpringBootApplication
    • Tomcat配置
    • Https配置

SpringBoot基础配置

@SpringBootApplication

在项目启动类上我们会加上@SpringBootApplication,它是一个组合注解,定义如下

@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(excludeFilters= {
	@Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
	@Filter (type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class)})
public @interface SpringBootApplication {
	//...
	}
  1. 第一个@SpringBootConfiguration是一个@Configuration,表明这是一个配置类,开发者可以再这个类中配置Bean,类似于Spring中的applicationContext.xml
  2. 第二个@EnableAutoConfiguration表示开启自动化配置。SpringBoot中的自动化配置是非侵入式的,在任意时刻,开发者都可以使用自定义配置代替自动化配置中的某一个配置
  3. 第三个@ComponentScan完成包扫描,也是Spring中的功能。由于@ComponentScan默认扫描的位置都位于当前类所在包的下面,因此建议在实际开发中,把启动类放在根包中。

Tomcat配置

在Sprin g Boot 项目中,可以内置Tomcat 、Jetty 、Undertow 、Netty 等容器。当开发者添加了spring-boot-starter-web 依赖之后, 默认会使用Tomcat 作为Web 容器。如果需要对Tomcat 做进一步的配置,可以在application.properties 中进行配置,代ti马如下:

server.port=BOBl
server.error.path=/error
server.servlet.session.timeout=30m
server.servlet.context-path=/项目名
server.tomcat.uri-encoding=utf-8
server.tomcat.max-threads=500
server.tomcat.basedir=/home/sang/tmp
  1. server.port 配置了Web 容器的端口号。
  2. error.path 配置了当项目出错时跳转去的页面。
  3. session.timeout 配置了session 失效时间, 30m 表示30 分钟,如果不写单位, 默认单位是秒。由于Tomcat 中配直session 过期时间以分钟为单位, 因此这里单位如果是秒的话,该时间会被转换为一个不超过所配直秒数的最大分钟数, 例如这里配直了119 ,默认单位为秒,则实际session过期时间为1分钟
  4. context-path 表示项目名称, 不配置时,默认为/。如果配直了,就要在访问路径中加上配直的路径。
  5. uri-encoding 表示配置Tomcat 请求编码。
  6. max - threads 表示Tomcat 最大线程数。
  7. basedir 是一个存放Tomcat 运行日志和临时文件的目录,若不配置,则默认使用系统的临时目录。

Https配置

  1. 由于HTTPS 具有良好的安全性,在开发中得到了越来越广泛的应用, 像微信公众号、小程序等的开发都要使用HTTPS 来完成。对于个人开发者而言, 一个HTTPS 证书的价格还是有点贵,国内有一些云服务器厂商提供免费的H TTPS 证书, 一个账号可以申请数个。不过在jdk 中提供了一个Java 数字证书管理工具keytool,在\jdk\bin 目录下,通过这个工具可以自己生成一个数字证书,生成命令如下:
keytool -genkey -alias tomcathttps -keyalg RSA -keysize 2048 -keystore key.pl2 -validity 365
  1. 在cmd 窗口中直接执行如上命令,在执行的过程中需要输入密钥口令等信息,根据提示输入即可。命令执行完成后,会在当前用户目录下生成一个名为key.pl2的文件,将这个文件复制到项目的根目录下, 然后在application. properties 中做如下配置:
server.ssl.key-store=wxy.pl2
server.ssl.key-alias =tomcathttps
server.ssl.key-store-password=l23456
  • key-store 表示密钥文件名。
  • key -alias 表示密钥别名。
  • key-store-password 就是在cmd 命令执行过程中输入的密码。
  1. 配置成功后,启动项目,在浏览器中输入“ https://localhost:port/项目名”来查看结果,如果用http访问就会失败
    注意项目用IDEA通过Spring Initializr构建
  2. 因为Spring Boot 不支持同时在配置中启动HTTP 和HTTPS 。这个时候可以配置请求重定向,将HTTP 请求重定向为HTTPS 请求。配置方式如下:
@Configuration
public class TomcatConfiguration {
    @Bean
    TomcatServletWebServerFactory tomcatServletWebServerFactory(){
        TomcatServletWebServerFactory factory = new TomcatServletWebServerFactory() {
            @Override
            protected void postProcessContext(Context context){
                SecurityConstraint constraint = new SecurityConstraint();
                constraint.setUserConstraint("CONFIDENTIAL");
                SecurityCollection collection = new SecurityCollection();
                collection.addPattern("/*");
                constraint.addCollection(collection);
                context.addConstraint(constraint);
                
            }
        };
        factory.addAdditionalTomcatConnectors(createTomcatConnector());
        return factory;
    }
    private Connector createTomcatConnector() {
        Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
        connector.setScheme("http");
        connector.setPort(8888);
        connector.setSecure(false);
        connector.setRedirectPort(8081);
        return connector;
    }
}

这里首先配置一个TomcatServletWebServerFactory ,然后添加一个Tomcat 中的Connector (监听8888 端口), 并将请求转发到8081 上去。配置完成后,在浏览器中输入“ http://localhost:8888/…”,就会自动重定向到“https://localhost:8081/…”上。

你可能感兴趣的:(学习,java,SpringBoot,Tomcat,Https,java,SpringBoot,Tomcat,Https)