SpringBoot学习五:错误处理、跨域支持

时间:2022-07-26
本文章向大家介绍SpringBoot学习五:错误处理、跨域支持,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

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。