提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
目录
- 什么是Spring Boot
- 一、Spring Boot有哪些优点?
- 二、Spring Boot的核心注解是哪个?它主要由哪几个注解组成的?
- 三、配置
- 四、Spring Boot自动配置原理是什么?
- 五、你如何理解 Spring Boot 配置加载顺序?
- 六、Spring Boot 中如何解决跨域问题 ?
- 七、什么是 CSRF 攻击?
什么是Spring Boot
Spring Boot 是 Spring 开源组织下的子项目,是 Spring 组件一站式解决方案,主要是简化了使用 Spring 的难度,简省了繁重的配置,提供了各种启动器,开发者能快速上手。
一、Spring Boot有哪些优点?
spring boot主要有如下优点:
1、容易上手,提升开发效率,为spring开发提供一个更快、更广泛的入门体验。
2、开箱即用,远离繁琐的配置。
3、提供了一系列大型项目通用的非业务性功能,例如:内嵌服务器、安全管理、运行数据监控、运行状况检查和外部化配置等。
4、没有代码生成,也不需要XML配置。
5、避免了大量的Maven导入和各种版本冲突。
二、Spring Boot的核心注解是哪个?它主要由哪几个注解组成的?
启动类上面的注解是@SpringBootApplication,它也是Spring Boot的核心注解,主要组合包含了以下3个注解:
@SpringBootConfiguration:组合了@Configuration注解,实现配置文件的功能。
@EnbaleAutoConfiguration:打开自动配置的功能,也可以关闭某个自动配置的选项,如关闭数据源自动配置功能:@SpringBootApplication(exclude={DataSourceAutoConfiguration.class})。
@ComponentScan:Spring组件扫描。
三、配置
1、什么事JavaConfig?
Spring JavaConfig 是 Spring 社区的产品,它提供了配置 Spring IoC 容器的纯Java 方法。因此它有助于避免使用 XML 配置。使用 JavaConfig 的优点在于:
(1)面向对象的配置。由于配置被定义为JavaConfig中的类,因此用户可以充分利用java中的面向对象功能。一个配置类可以继承另外一个,重写它的@Bean方法等。
(2)减少或消除 XML 配置。基于依赖注入原则的外化配置的好处已被证明。
但是,许多开发人员不希望在 XML 和 Java 之间来回切换。JavaConfig 为开发人员提供了一种纯 Java 方法来配置与 XML 配置概念相似的 Spring 容器。从
技术角度来讲,只使用 JavaConfig 配置类来配置容器是可行的,但实际上很多人认为将JavaConfig 与 XML 混合匹配是理想的。
(3)类型安全和重构友好。JavaConfig 提供了一种类型安全的方法来配置
Spring容器。由于 Java 5.0 对泛型的支持,现在可以按类型而不是按名称检索 bean,不需要任何强制转换或基于字符串的查找。
四、Spring Boot自动配置原理是什么?
注解@EnableAutoConfiguration、@Configuration、@ConditionalOnClass就是自动配置的核心.
@EnableAutoConfiguration:给容器导入META-INF/spring.factories 里定义的自动配置类。
筛选有效的自动配置类。
每一个自动配置类结合对应的 xxxProperties.java 读取配置文件进行自动配置功能.
@Configuration :指示一个类声明一个或多个@Bean方法,并且可以由Spring容器处理,以便在运行时为这些bean生成BeanDefinition和服务请求
@ConditionalOnClass:类加载器中存在指明的类,某个class位于类路径上,才会实例化一个Bean。即判断当前classpath下是否存在指定类,若是则将当前的配置装载入spring容器.
五、你如何理解 Spring Boot 配置加载顺序?
1、properties文件;
2、YAML文件;
3、系统环境变量;
4、命令行参数;
六、Spring Boot 中如何解决跨域问题
跨域可以在前端通过JSONP来解决,但是JSONP只可一发送GET请求,无法发送其他类型的请求,在Restful风格的应用中,就显得非常鸡肋,因此我们推荐在后端使用CORS(Cross-origin resource sharing)来解决跨域问题。这种解决方案并非Spring Boot特有的,在传统的SSM框架中,就可以通过CORS来解决跨域问题,只不过之前实现WebMvcConfigurer接口,然后重写addCorsMappings方法解决跨域问题。
项目中前后端分离部署,所以需要解决跨域的问题。
我们使用cookie存放用户登录的信息,在spring拦截器进行权限控制,当权限不符合时,直接返回给用户固定的json结果。
当用户登录以后,正常使用;当用户退出登录状态时或者token过期时,由于拦截器和跨域的顺序有问题,出现了跨域的现象。
我们知道一个http请求,先走filter,到达servlet后才进行拦截器的处理,如果我们把cors放在filter里,就可以优先于权限拦截器执行。
七、什么是 CSRF 攻击?
CSRF 代表跨站请求伪造。这是一种攻击,迫使终用户在当前通过身份验证的 Web 应用程序上执行不需要的操作。CSRF 攻击专门针对状态改变请求,而不是数据窃取,因为攻击者无法查看对伪造请求的响应。