问题遇到的现象和发生背景
springboot整合springsecurity后,配置cors,使用全局配置允许跨域无效,但是使用注解@CrossOrigin却有效
问题相关代码,请勿粘贴截图
<!-- spirngboot版本 -->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.6.6</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
/**
* springsecurity配置
*
* @author smwd
* @version v1.0, 2022-04-21 14:15
*/
@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
// 允许cors配置
http.cors();
http
// 关闭csrf
.csrf().disable()
// 不通过session获取上下文
.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)
.and()
.authorizeRequests()
// 允许登录接口匿名访问
.antMatchers("/user/login").anonymous()
.antMatchers("/user/register").anonymous()
.antMatchers("/user/refresh").anonymous()
// 其他接口都要认证
.anyRequest().authenticated();
http.addFilterBefore(jwtAuthenticationTokenFilter, UsernamePasswordAuthenticationFilter.class);
http.exceptionHandling()
.authenticationEntryPoint(loginFailureHandler)
.accessDeniedHandler(accessDeniedHandler);
http.authorizeRequests().expressionHandler(defaultWebSecurityExpressionHandler());
}
}
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
/**
* 跨域配置
*/
@Configuration
public class CorsConfig implements WebMvcConfigurer {
@Bean
public WebMvcConfigurer corsConfigurer() {
return new WebMvcConfigurer() {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedOrigins("*") // 允许跨域的域名,可以用*表示允许任何域名使用
.allowedMethods("*") // 允许任何方法(post、get等)
.allowedHeaders("*") // 允许任何请求头
.exposedHeaders("*")// 暴露哪些原始请求头部信息
.maxAge(3600); // maxAge(3600)表明在3600秒内,不需要再发送预检验请求,可以缓存该结果
}
};
}
}
运行结果及报错内容
跨域请求报401,跨域失败
我的解答思路和尝试过的方法
删除全局跨域配置,并在控制器加上注解 CrossOrigin 起作用
/**
* 基础控制器
*
* @author smwd
* @version v1.0 2022-04-20 19:03
*/
@CrossOrigin(origins ="*",maxAge = 3600)
public class BaseController {
// do something
}
我想要达到的结果
如何不使用注解,而使用全局配置解决全局跨域问题?
为什么这样使用配置不生效