1.SpringBoot错误产生
Spring Boot默认提供一个/error映射用来以合适的方式处理所有的错误,并将它注册为servlet容器中全局的错误页面。当出现一个错误信息时,会产生一个具有详细错误、HTTP状态,异常信息的JSON相应。具体到页面上,会产生一个错误视图。
出现该页面是因为代码中出现了运行时异常,如果代码中指定/error 路径,实现ErrorController,并注册一个该类型的bean定义,或简单地添加一个ErrorAttributes类型的bean以使用现存的机制,只是替换显示的内容则该页面会被替换成指定页面。
Spring Boot 本身在处理异常时,也是当所有条件都不满足时,才会去找 /error 路径。
动态异常页面
动态异常页面可以使用jsp、thymeleaf,动态页面可以直接展示异常信息。
如果使用thymeleaf,可以在resource/templates/error下定义一个4xxhtml、5xx.html用于展示异常信息。
2.SpringBoot解决跨域问题
同源策略
同源是指协议、域名以及端口要相同。
在前后端分离开发过程中,肯定会出现跨域问题,传统的JSONP可以使用GET方式请求,而CORS跨域是避开浏览器的同源策略。
从4.2版本开始,Spring MVC对CORS提供开箱即用的支持。不用添加任何特殊配置,只需要在Spring Boot应用的controller方法上注解@CrossOrigin
//在Controller上配置跨域
@CrossOrigin(origins = "localhost:8081")
@RestController
@RequestMapping("/account")
public class AccountController {
//在方法上配置跨域
@CrossOrigin
@RequestMapping("/{id}")
public Account retrieve(@PathVariable Long id) {
// ...
}
@RequestMapping(method = RequestMethod.DELETE, path = "/{id}")
public void remove(@PathVariable Long id) {
// ...
}
}
@CrossOrigin注解:配置某一个方法接受某一个域的请求。
局限性:该注解仅仅可以实现某个类、某个方法层面上的跨域请求。
全局配置
@Configuration
@EnableWebMvc
public class WebConfig extends WebMvcConfigurerAdapter {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/api/**")
.allowedOrigins("http://domain2.com")
.allowedMethods("PUT", "DELETE")
.allowedHeaders("header1", "header2", "header3")
.exposedHeaders("header1", "header2")
.allowCredentials(false).maxAge(3600);
}
}
存在的问题:容易被csrf攻击
在SpringSecurity中配置防止csrf攻击,访问携带token。