文章目录
1、什么是SpringBoot?
SpringBoot是Spring的子组项目,它是在Spring的基础上,对我们Spring繁琐的配置进行简化,提供启动器对依赖的统一导入,避免了依赖冲突,它使我们可以很快搭建一个web应用。
2、SpringBoot有哪些优点?
- 开箱即用,上手容易,避免繁琐配置
- 使用JavaConfig,避免XML
- 避免了大量的依赖的导入,导致依赖的冲突
- 内嵌Tomcat,无需部署到服务器即可运行
3、什么是YML,及优势?
YAML 是一种人类可读的数据序列化语言。它通常用于配置文件。与属性文件相比,如果我们想要在配置文件中添加复杂的属性,YAML 文件就更加结构化,而且更少混淆。可以看出 YAML 具有分层配置数据。
优势:
- 配置有序,在一些特殊的场景下,配置有序很关键
- 支持数组,数组中的元素可以是基本数据类型也可以是对象
- 简洁,前缀不会出现冗余
4、比较一下 Spring Security 和 Shiro 各自的优缺点 ?
由于 Spring Boot 官方提供了大量的非常方便的开箱即用的 Starter ,包括 Spring Security 的 Starter ,使得在 Spring Boot 中使用 Spring Security 变得更加容易,甚至只需要添加一个依赖就可以保护所有的接口,所以,如果是 Spring Boot 项目,一般选择 Spring Security 。当然这只是一个建议的组合,单纯从技术上来说,无论怎么组合,都是没有问题的。Shiro 和 Spring Security 相比,主要有如下一些特点:
- Spring Security 是一个重量级的安全管理框架;Shiro 则是一个轻量级的安全管理框架
- Spring Security 概念复杂,配置繁琐;Shiro 概念简单、配置简单
- 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请求
所谓的同源就是协议、域名、端口均相同,否则就存在跨域。
跨域的四种解决方式:
- 在后端Controller加@CrossOrigin注解
- 配置全局过滤器,设置跨域的响应头
- nginx设置代理
- 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