前言:
现在咱们对“springmvc跨域请求”都比较关切,看官们都需要分析一些“springmvc跨域请求”的相关内容。那么小编也在网摘上汇集了一些对于“springmvc跨域请求””的相关资讯,希望大家能喜欢,我们一起来了解一下吧!@CrossOrigin 注解
@CrossOrigin 注解在控制器方法上启用:
@RestController@RequestMapping("/account")public class AccountController { @CrossOrigin @GetMapping("/{id}") public Account retrieve(@PathVariable Long id) { // ... } @DeleteMapping("/{id}") public void remove(@PathVariable Long id) { // ... }}
默认的 @CrossOrigin 启用以下功能:
All origins. 所有请求源,向该服务器提交请求的URIAll headers. 全部的访问头信息All HTTP methods to which the controller method is mapped. 控制器方法映射到的所有HTTP方法。allowedCredentials is not enabled by default since that establishes a trust level that exposes sensitive user-specific information such as cookies and CSRF tokens, and should only be used where appropriate.allowedCredentials 默认情况下未启用,因为它建立了一个信任级别,用于公开敏感的用户特定信息,如Cookie和CSRF令牌,并且只能在适当的情况下使用。maxAge is set to 30 minutes.maxAge 设置为30分钟。预检请求的缓存时间(秒),即在这个时间段里,对于相同的跨域请求不会再预检了
@CrossOrigin 也在类级别上得到支持,并由所有方法继承:
@CrossOrigin(origins = "", maxAge = 3600)@RestController@RequestMapping("/account")public class AccountController { @GetMapping("/{id}") public Account retrieve(@PathVariable Long id) { // ... } @DeleteMapping("/{id}") public void remove(@PathVariable Long id) { // ... }}
@CrossOrigin 可以在类和方法同时使用:
@CrossOrigin(maxAge = 3600)@RestController@RequestMapping("/account")public class AccountController { @CrossOrigin("") @GetMapping("/{id}") public Account retrieve(@PathVariable Long id) { // ... } @DeleteMapping("/{id}") public void remove(@PathVariable Long id) { // ... }}全局配置
Java配置
要在MVC Java配置中启用CORS,请使用CorsRegistry回调:
@Configuration@EnableWebMvcpublic class WebConfig implements WebMvcConfigurer { @Override public void addCorsMappings(CorsRegistry registry) { registry.addMapping("/api/**") .allowedOrigins("") .allowedMethods("PUT", "DELETE") .allowedHeaders("header1", "header2", "header3") .exposedHeaders("header1", "header2") .allowCredentials(true).maxAge(3600); // Add more mappings... }}
XML配置
要在XML命名空间中启用CORS,使用 <mvc:cors> 元素:
<mvc:cors> <mvc:mapping path="/api/**" allowed-origins=", " allowed-methods="GET, PUT" allowed-headers="header1, header2, header3" exposed-headers="header1, header2" allow-credentials="true" max-age="123" /> <mvc:mapping path="/resources/**" allowed-origins="" /></mvc:cors>CORS过滤器
可以通过内置的CorsFilter来应用CORS支持。
Configurationpublic class CorsConfig { @Bean public CorsFilter corsFilter() { final UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); final CorsConfiguration config = new CorsConfiguration(); config.setAllowCredentials(true); // 允许cookies跨域 config.addAllowedOrigin("*");// #允许向该服务器提交请求的URI,*表示全部允许,在SpringMVC中,如果设成*,会自动转成当前请求头中的Origin config.addAllowedHeader("*");// #允许访问的头信息,*表示全部 config.setMaxAge(3600L);// 预检请求的缓存时间(秒),即在这个时间段里,对于相同的跨域请求不会再预检了 config.addAllowedMethod("*");// 允许提交请求的方法,*表示全部允许 source.registerCorsConfiguration("/**", config); return new CorsFilter(source); }}其他使用jsonp来进行跨域,但不太安全。后台response添加header,response.setHeader("Access-Control-Allow-Origin", "*");
@Controller public static class TestController { @RequestMapping(value = "/test") @ResponseBody public String getInfo(String id, HttpServletResponse response) throws Exception { response.setHeader("Access-Control-Allow-Origin", "*"); //....... return "....."; } }
标签: #springmvc跨域请求