Spring Boot 知识点个人总结

概述

spring boot是spring开源组织下的子项目,是Spring组件一站式解决方案,主要是简化了使用Spring的难度,简省了繁重的配置,提供了各种启动器,开发者能快速上手。

一、Spring Boot 有哪些优点

  1. 容易上手,提升开发效率,为spring开发提供一个更快、更广泛的入门体验
  2. 开箱即用,远离繁琐的配置
  3. 提供一系列大型项目通用的非业务新功能,例如:内嵌服务器、安全管理、运行数据监控、运营状况检查和外部化配置等
  4. 没有代码生成,也不需要XML配置
  5. 避免大量的Maven导入和各种版本冲突

二、Spring Boot 的核心注解是那个?它主要由哪些注解组成?

启动类上面的注解@springbootApplication
主要包含下main三个注解:

  1. @SpringBootConfiguration -组合了@Configuration注解,实现配置文件的功能
  2. @EnableAutoConfiguration - 打开自动配置的功能,也可以关闭某个自动配置的选项,如关闭数据源自动配置功能:
    @SpringBootApplication(exclude={DataSourceAutoConfiguration.class})。
  3. @ComponentScan -Spring组件扫描。

三、配置

3.1、什么是javaConfig

Spring Java Config是Spring社区的产品,它提供了配置SpringIoC容器的纯Java方法。因此它有助于比卖你使用XML配置。使用JavaConfig的优点在于:

  1. 面向对象的配置。由于配置被定义为Java Config中的类,因此用户可以充分Java中的面向对象功能。一个配置类可以继承另一个,重写它的@Bean方法等
  2. 减少或者消除XML配置。基于依赖注入原则的外化配置的好处已被证明。但是许多开发人员希望在XML和Java之间来回切换。Java Config为开发人员提供了一种纯Java方法来配置与XML配置概念相似的spring容器。从技术角度来讲,只使用Java Config配置类来配置容器是可行的,但实际上很多人认为将Java Config于XML混合匹配是理想的
  3. 类型安全和重构友好。Java Config提供了一种类型安全的方法来配置Spring容器。由于Java5.0对泛型的支持,现在可以按类型而不是名称检索bean,不需要任何强制转换或基于字符串的查找。

3.2、Spring Boot 自动配置原理是什么

注解@EnableAutoConfiguration,@Configuration,@ConditionalOnClass就是自动配置的核心;@EnableAutoConfiguration给容器导入META-INF/spring.factories里定义的自动配置类,筛选有效的自动配置类。
每一个自动配置类结合对应的xxxProperties.java读取配置文件进行自动配置功能。

3.3、Spring Boot 配置加载顺序

在spring boot里卖弄,可以使用以下几种方式来加载配置。

  1. properties文件
  2. YAML文件
  3. 系统环境变量
  4. 命令行参数

3.4、YAML配置

3.4.1、什么是YAML?

YAML是一种人类可读的数据序列化语言。它通常用于配置文件。与属性文件。与属性文件相比,如果我们要在配置文件中添加复杂的属性,YAML文件就更加结构化,而且更少混淆。可以看出YAML具有分组配置数据的作用

3.4.2、YAML配置的优势在哪里?

YAML现在可以算是非常流行的一种配置文件格式了,无论是前端还是后端,都可以见到YAML配置。那么YAML配置和传统的properties配置相比到底有哪些优势?

  1. 配置有序,在一些特殊的场景下,配置有序很关键
  2. 支持数组,数组中的元素可以是基本数据类型也可以是对象
  3. 简介:相比properties配置文件,YAML还有一个缺点,就是不支持@Property Source注解导入自定义YAML配置

3.5、Spring Boot 是否可以使用XML配置?

Spring Boot 推荐使用Java配置而非XML配置,但是Spring Boot 中也可以使用XML配置,通过@Import Resource注解可以引入一个XML配置

3.6、Spring Boot 核心配置文件是什么?

单纯做SpringBoot 开发,可能不太容易遇到bootstrap.properties 配置文件,但是在结合Spring Cloud 时,这个配置就是经常遇到了,特别时在需要加载一些远程配置文件的时候

SpringBoot 核心的两个配置文件:

  1. bootstrap(.yml或者.properties):bootstrap由ApplicationContext加载的,比application优先加载,配置在应用程序上下文的引导阶段生效。一般来说我们在Spring Cloud Config或者Nacos中会用到它。且bootstrap里面的属性不能被覆盖。
  2. application(.yml或者.properties):由ApplicationContext加载,用于spring boot项目的自动化配置。

3.7、什么是Spring Profiles?

Spring Profiles允许用户根据配置文件(dev,test,prod等)来注册bean。因此,当应用程序在开发运行时只有某些bean可以加载,而在生产环境中某些其他bean可以加载。假设我们的要求是Swagger文档仅适用于QA环境,并且禁用所有其他文档。这可以使用配置文件来完成。Spring Boot使得使用配置文件非常简单。

3.8、如何在自定义端口上运行Spring Boot 应用程序?

为了在自定义端口上运行Spring Boot应用程序,您可以在application.properties中指定端口,server.port=8090。

四、安全

4.1、如何实现Spring Boot 应用程序的安全性?

为了实现Spring Boot的安全性,我们使用spring-boot-start-security依赖项,并且必须添加安全配置。它只需要很少的代码。配置类将必须扩展WebSecurityConfigurerAdapter并覆盖其方法。

4.2、比较一下Spring Security和Shiro各自的优缺点?

由于Spring Boot官方提供了大量的非常方便的开箱即用的Starter,包括Spring Security的Starter,使得在Spring Boot中使用Spring Security变的更加容易,甚至只需要添加一个依赖就可以保护所有的接口,所以,如果是Spring Boot项目,一般选择Spring Security。Shiro和Spring Security相比,主要有如下一些特点:

  1. Spring Security 是一个重量级的安全管理框架;Shiro则是一个轻量级的安全管理框架。
  2. Spring Security 概念复杂,配置繁琐;Shiro概念简单、配置简单
  3. Spring Security 功能强大;Shiro功能简单

4.3、Spring Boot 中如何解决跨域问题?

跨域问题可以在前端通过JSONP来解决,但是JSONP只可以发送GET请求,无法发送其他类型的请求,在RESTful风格的应用中,就显得非常鸡肋,因此我们推荐在后端通过(CORS:Cross-origin-resource-sharing)来解决跨域问题。这种解决方案并非Spring Boot 独一的,在传统的SSM框架中,就可以通过CORS来解决跨域问题,只不过之前我们是在XML文件配置CORS,现在可以通过实现WebMvcConfigurer接口然后重写addCorsMapping方法解决跨域问题

@Configuration
public class CorsConfig implements WebMvcConfigurer {
    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**")
                .allowedOrigins("*")
                .allowCredentials(true)
                .allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS")
                .maxAge(3600);
    }
}

项目中前端分离部署,所以需要解决跨域问题(跨域就是跨站点(跨域名),一个域名会具体绑定到服务器的端口,所以前后端分离即使是同一台服务器上也需要解决跨域问题)。
我们使用cookie存放用户登录的信息,在spring拦截器进行权限控制,当权限不符合时,直接返回给用户固定的Json结果。
当用户登录以后,正常使用;当用户退出登录状态时或者token过期时,由于拦截器和跨域的顺序有问题,出现了跨域的现象。
我们指定一个Http请求,先走web容器的filter,到达spring servlet后才进行拦截器的处理,如果我们把cors放入filter里,就可以优先权限拦截器执行。

@Configuration
public class CorsConfig {
    @Bean
    public CorsFilter corsFilter() {
        CorsConfiguration corsConfiguration = new CorsConfiguration();
        corsConfiguration.addAllowedOrigin("*");
        corsConfiguration.addAllowedHeader("*");
        corsConfiguration.addAllowedMethod("*");
        corsConfiguration.setAllowCredentials(true);
        UrlBasedCorsConfigurationSource urlBasedCorsConfigurationSource = new UrlBasedCorsConfigurationSource();
        urlBasedCorsConfigurationSource.registerCorsConfiguration("/**", corsConfiguration);
        return new CorsFilter(urlBasedCorsConfigurationSource);
    }
}

4.4、什么是CSRF攻击?

CSRF代表跨站点请求伪造。这种攻击迫使用户在当前通过身份验证的Web应用程序上执行不需要的操作。CSRF攻击专门针对状态改变请求,而不是数据窃取,因为攻击者无法查看堆伪造请求的响应。

五、监视器

5.1、Spring Boot 中的监视器是什么?

Spring boot actuator 是Spring 启动框架中的重要功能之一。Spring boot 监视器可帮助您访问生产环境中正常运行的应用程序的当前状态。有几个指标必须在生产环境中进行检查和监控:即一些外部应用程序可能正在使用这些服务向来向相关人员触发警报消息。监视器模块公开了一组可直接作为HTTP URL访问的REST 端点来检查程序状态

5.2、如何在Spring Boot中禁用Actuator端点安全性?

默认情况下,所有敏感的HTTP端口都是不安全的,只有具有ACTUATOR角色的用户才能访问它们。安全性是使用标准的HttpServletRequest.isUerInRole方法实施的。我们可以使用来禁用安全性。只有在执行机构端点在防火墙后访问时,才建议禁用安全性。

5.3、我们如何监视所有Spring Boot 微服务?

Spring Boot提供监视器端点以监控各个微服务的度量。这些端点对于获取有关应用程序的信息(如它们是否已启动)以及它们的组件(如数据库等)是否正常运行很有帮助。但是,使用监视器的一个主要缺点或困难是,我们必须单独打开应用程序的监控器端点以了解其状态或健康状况。想象一下涉及50个应用程序的微服务,管理员将不得不打开50个应用程序的执行终端,这种场景我们可以使用相关开源项目,它们建立在Spring Boot Actuator之上,它提供了一个Web UI使我们能够可视化多个应用程序的度量。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

胖天才小朱(怀玉)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值