SpringBoot相关知识点

本文介绍了SpringBoot的基础概念、优势、配置文件YML的特点及其优势,并对比了SpringSecurity和Shiro的区别。此外还详细解释了CSRF攻击、跨域问题的解决方法以及SpringBoot自动配置和依赖管理的工作原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


1、什么是SpringBoot?

SpringBoot是Spring的子组项目,它是在Spring的基础上,对我们Spring繁琐的配置进行简化,提供启动器对依赖的统一导入,避免了依赖冲突,它使我们可以很快搭建一个web应用。

2、SpringBoot有哪些优点?
  1. 开箱即用,上手容易,避免繁琐配置
  2. 使用JavaConfig,避免XML
  3. 避免了大量的依赖的导入,导致依赖的冲突
  4. 内嵌Tomcat,无需部署到服务器即可运行
3、什么是YML,及优势?

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

优势:

  1. 配置有序,在一些特殊的场景下,配置有序很关键
  2. 支持数组,数组中的元素可以是基本数据类型也可以是对象
  3. 简洁,前缀不会出现冗余
4、比较一下 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 功能简单
5、什么是 CSRF 攻击?

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

6、SpringBoot如何解决跨域问题?

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

@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请求,先走filter,到达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);
    }
}

使用注解:@CrossOrigin
在这里插入图片描述

7、什么是跨域?

浏览器不能执行其他网站的脚本,它由浏览器的同源策略限制的,是浏览器对JavaScript实施的安全限制。
同源策略限制了以下的行为:

  • Cookie、LocalStorage无法读取
  • Dom和JS对象无法获取
  • 无法发送ajax请求
    所谓的同源就是协议、域名、端口均相同,否则就存在跨域。

跨域的四种解决方式:

  1. 在后端Controller加@CrossOrigin注解
  2. 配置全局过滤器,设置跨域的响应头
  3. nginx设置代理
  4. get请求使用jsonp的格式
8、SpringBoot的自动转配原理?

springboot通过main方法启动,在main方法中会调用run方法,在run方法执行的时候,会有刷新容器的过程,就是refreshContext(context),在刷新容器的时候就会解析注解,将我们的Bean注入到容器中,这时就会解析启动类上的@SpringBootApplication注解,这个注解是个组合注解,下面说一下这个组合注解的3个比较重要的注解及作用,@SpringBootConfiguration注解,表示启动类是一个SpringBoot配置类,@ComponentScan注解,进行组件扫描,默认是扫描该启动类所在的包及其子包,还有@EnableAutoConfiguration注解,开启自动装配,这个注解里Import了一个类,当项目启动时,spring会实例化这个类,并调用其中的selectImports方法,这个方法会帮我们加载类路径下的META-INF/spring.factories文件,这个文件中有很多的配置类,配置类上会有很多的条件注解,会根据你引入的jar包,或者其他条件进行过滤排除一些配置类,然后把相应的Bean注入到容器里边,从而实现了自动装配。

9、SpringBoot起步依赖原理?

作用:就是进行依赖的传递。
https://blog.youkuaiyun.com/Linging_24/article/details/108258555

10、SpringBoot多种属性注入方式

https://blog.youkuaiyun.com/Linging_24/article/details/108255738

11、SpringBoot的配置文件和静态资源文件

https://blog.youkuaiyun.com/Linging_24/article/details/108274223?spm=1001.2014.3001.5502

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值