1、SpringBoot 简介及优点
Spring Boot 是 Spring 开源组织下的子项目,SpringBoot 是一个快速开发的框架,能够快速的整合第三方框架,简化XML配置,全部采用注解形式,内置Tomcat容器,帮助开发者能够实现快速开发,SpringBoot的Web组件 默认集成的是SpringMVC框架。
Spring Boot的主要优点:
独立运行
为所有Spring开发者更快的入门
提供各种默认配置来简化项目配置
内嵌式容器简化Web项目
没有冗余代码生成和XML配置的要求
避免大量的 Maven 导入和各种版本冲突
2、@SpringBootApplication
启动类上面的注解是@SpringBootApplication,它也是 Spring Boot 的核心注解,主要组合包含了以下3 个解:
@SpringBootConfiguration:组合了 @Configuration 注解,实现配置文件的功能。
@EnableAutoConfiguration:打开自动配置的功能,也可以关闭某个自动配置的选项,如关闭数据源自动配置功能: @SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })。
@ComponentScan:Spring组件扫描。
3、如何重新加载Spring Boot上的更改,而无需重新启动服务器?
这可以使用DEV工具来实现。通过这种依赖关系,您可以节省任何更改,嵌入式tomcat将重新启动。Spring Boot有一个开发工具(DevTools)模 块,它有助于提高开发人员的生产力。Java开发人员面临的一个主要挑 战是将文件更改自动部署到服务器并自动重启服务器。开发人员可以重新 加载Spri ng Boot上的更改,而无需重新启动服务器。这将消除每次手动部 署更改的需要。Spring Boot在发布它的第一个版本时没有这个功能。这 是开发人员最需要的功能。DevTools模块完全满足开发人员的需求。该模 块将在生产环境中被禁用
Devtools原理
- devtools会监听classpath下的文件变动,并且会立即重启应用(发生在保存时机),注意:因为其采用的虚拟机机制,该项重启是很快的。
- devtools可以实现页面热部署(即页面修改后会立即生效,这个可以直接在application.properties文件中配置spring.thymeleaf.cache=false来实现(这里注意不同的模板配置不一样)
4、 Spring Boot中的监视器是什么?
可帮助你在应用程序生产环境时监视和管理应用程序。可以使用HTTP的各种请求来监管,审计,收集应用的运行情况.特别对于微服务管理十分有意义.缺点:没有可视化界面。
5、 如何在Spring Boot中禁用Actuator端点安全性?
默认情况下,所有敏感的HTTP端点都是安全的,只有具有ACTUATOR 角色的用户才能访问它们。安全性是使用标准的HttpServletRequest.isUserlnRole方法实施的。我们可以使用 management.security.enabled = false来禁用安全性。只有在执行机构端点在防火墙后访问时,才建议禁用安全 性。
6、 如何在自定义端口上运行Spring Boot应用程序?
为了在自定义端口上运行Spri ng Boot应用程序,您可以在 applicati on .properties 中指定端口。
server.port = 8090
7、 如何使用Spring Boot实现分页和排序?
使用Spr ing Boot实现分页非常简单。使用Spri ng Data-JPA可以实现将 可分页的 org.spri ngframework.data.doma in .Pageable 传递给存储库方法。
8、 什么是Swagger?你用Spring Boot实现了它吗?
Swagger广泛用于可视化API,使用Swagger UI为前端开发人员提供在 线沙箱。Swagger是用于生成RESTful Web服务的可视化表示的工具,规 范和完整框架实现。它使文档能够以与服务器相同的速度更新。当通过 Swagger正确定义时,消费者可以使用最少量的实现逻辑来理解远程服 务并与其进行交互。因此,Swagger消除了调用服务时的猜测。
9、 什么是 Spring Profiles?
Spring Profiles允许用户根据配置文件(dev, test, prod等)来注册bean。 因此,当应用程序在开发中运行时,只有某些bean可以加载,而在 PRODUCTION中,某些其他bean可以加载。假设我们的要求是 Swagger文档仅适用于QA环境,并且禁用所有其他文档。这可以使用配 置文件来完成。Spring Boot使得使用配置文件非常简单。
在项目的开发中,有些配置文件在开发、测试或者生产等不同环境中可能是不同的,例如数据库连接、redis的配置等等。那我们如何在不同环境中自动实现配置的切换呢?Spring给我们提供了profiles机制,下面看看在Spring Boot中是如何使用Profiles功能的。
在Spring Boot中多环境配置文件名需要使用application-{profile}.properties的格式,这里的**{profile}**对应的是你的环境标识。例如:
application-dev.properties — 这是开发环境
application-prod.properties — 这是生产环境
程序会默认加载application.properties中的配置,我们想要使用对应的环境,只需要在application.properties中使用spring.profiles.active属性来设置,值对应上面提到的{profile},这里就是指dev、prod:
spring.profiles.active=dev
10、 什么是 Spring Batch?
Spring Boot Batch提供可重用的函数,这些函数在处理大量记录时非常重 要,包括日志/跟踪,事务管理,作业处理统计信息,作业重新启动,跳 过和资源管理。它还提供了更先进的技术服务和功能,通过优化和分区技 术,可以实现极高批量和高性能批处理作业。简单以及复杂的大批量批处 理作业可以高度可扩展的方式利用框架处理重要大量的信息。
11、 什么是FreeMarker模板?
FreeMarker是一个基于Java的模板引擎,最初专注于使用MVC软件架构 进行动态网页生成。使用Freemarker的主要优点是表示层和业务层的完 全分离。程序员可以处理应用程序代码,而设计人员可以处理html页面 设计。最后使用freemarker可以将这些结合起来,给出最终的输出页面。
模板引擎
在动态HTML实现上Spring Boot依然可以完美胜任,并且提供了多种模板引擎的默认配置支持,所以在推荐的模板引擎下,我们可以很快的上手开发动态网站。
Spring Boot提供了默认配置的模板引擎主要有以下几种:
• Thymeleaf
• FreeMarker
• Velocity
• Groovy
• Mustache
Spring Boot建议使用这些模板引擎,避免使用JSP,若一定要使用JSP将无法实现Spring Boot的多种特性,具体可见后文:支持JSP的配置
当你使用上述模板引擎中的任何一个,它们默认的模板配置路径为:src/main/resources/templates。当然也可以修改这个路径,具体如何修改,可在后续各模板引擎的配置属性中查询并修改。
12、 如何使用Spring Boot实现异常处理?
Spring提供了一种使用ControllerAdvice处理异常的非常有用的方法。我们 通过实现一个Co ntrolerAdvice类,来处理控制器类抛出的所有异常。
@ControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(RuntimeException.class)
@ResponseBody
public Map<String, Object> exceptionHandler() {
Map<String, Object> map = new HashMap<String, Object>();
map.put("errorCode", "101");
map.put("errorMsg", "系統错误!");
return map;
}
}
13、 什么是CSRF攻击?Spring Boot 中如何解决跨域问题 ?
CSRF代表跨站请求伪造。这是一种攻击,迫使最终用户在当前通过身份 验证的Web应用程序上执行不需要的操作。CSRF攻击专门针对状态改 变请求,而不是数据窃取,因为攻击者无法查看对伪造请求的响应。
跨域可以在前端通过 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里,就可以优先于权限拦截器执行。