SpringSecurity - CORS测试

SpringSecurity5 默认有效 CORS.
实装时需要指定允许的站点

CORS设置-有效

服务器端

只需添加依赖,默认有效。

  • 添加SpringSecurity5 依赖
    compile("org.springframework.boot:spring-boot-starter-security")
    

客户端

新建Boot工程,指定另外的端口
测试src,参照;Ajax测试CORS/ Login / Logout部分

测试

客户端访问,F12调试,出现错误信息
在这里插入图片描述
可以看到 CORS 起了作用,端口不可访问。

CORS设置 -无效

服务器端

方式一 @CrossOrigin注解

在服务器的 Controller 上设置 @CrossOrigin 允许所有跨域请求

 @CrossOrigin
 public String test() {
     log.info("This is test log.");
     return "Hello!, This is a sample for test API. ";
 }

在返回的头上可以看到; Access-Control-Allow-Origin: *
也可以将其放在整个Controller类上,对所有接口设置开放权限

方式二 MVC全局CORS配置

@Configuration
public class MyConfiguration {

 @Bean
 public WebMvcConfigurer corsConfigurer() {
     return new WebMvcConfigurerAdapter() {
         @Override
         public void addCorsMappings(CorsRegistry registry) {
             registry.addMapping("/api/**");
         }
     };
 }
}

方式三 CorsFilter

在服务器端,设置指定的允许admin

@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

 @Override
 protected void configure(HttpSecurity http) throws Exception {
 	http
 		// by default uses a Bean by the name of corsConfigurationSource
 		.cors().and()
 		...
 }

 @Bean
 CorsConfigurationSource corsConfigurationSource() {
 	CorsConfiguration configuration = new CorsConfiguration();
 	configuration.setAllowedOrigins(Arrays.asList("https://example.com"));
 	configuration.setAllowedMethods(Arrays.asList("GET","POST"));
 	UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
 	source.registerCorsConfiguration("/**", configuration);
 	return source;
 }
}

或者

@Bean
 public CorsFilter corsFilter() {
     UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
     CorsConfiguration config = new CorsConfiguration();
     config.addAllowedOrigin("*");
     config.setAllowCredentials(true);
     config.addAllowedHeader("*");
     config.addAllowedMethod("*");
     source.registerCorsConfiguration("/**", config);
     FilterRegistrationBean bean = new FilterRegistrationBean(new CorsFilter(source));
     bean.setOrder(0);
     return new CorsFilter(source);
 }

客户端

重新访问测试,成功。

猜你喜欢

转载自blog.csdn.net/oblily/article/details/87880904
今日推荐