练习一个后台管理系统项目,在登陆模块集成springSecurity后无法登陆,老是显示跨域问题
问题照片:
如图所示,但我的项目是已经做了网关跨域处理的
但是不知道为什么还会出现开头的错误,找了网上说是options 的问题,但也不知是不是这个,没解决,请教一下
Security的一些配置
练习一个后台管理系统项目,在登陆模块集成springSecurity后无法登陆,老是显示跨域问题
问题照片:
如图所示,但我的项目是已经做了网关跨域处理的
但是不知道为什么还会出现开头的错误,找了网上说是options 的问题,但也不知是不是这个,没解决,请教一下
Security的一些配置
以下回答引用自chatGpt, 有用的话,请采纳哇!!!
在 Spring Security 中配置跨域请求可以通过以下两种方式:
1, 在 Spring Security 配置类中添加 CorsConfigurationSource
Bean
在 Spring Security 配置类中添加 CorsConfigurationSource
Bean,用于配置跨域请求。以下是一个示例:
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.cors() // 开启跨域配置
.and()
.authorizeRequests()
.anyRequest().authenticated()
.and()
.formLogin()
.and()
.httpBasic();
}
@Bean
public CorsConfigurationSource corsConfigurationSource() {
CorsConfiguration configuration = new CorsConfiguration();
configuration.setAllowedOrigins(Arrays.asList("http://localhost:8080")); // 允许跨域请求的域名
configuration.setAllowedMethods(Arrays.asList("GET","POST")); // 允许的请求方法
configuration.setAllowedHeaders(Arrays.asList("Content-Type","Authorization")); // 允许的请求头
configuration.setExposedHeaders(Arrays.asList("Authorization")); // 允许暴露的响应头
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
source.registerCorsConfiguration("/**", configuration);
return source;
}
}
2,在 Spring Security 配置类中重写 configure
方法
在 Spring Security 配置类中重写 configure
方法,并配置跨域请求。以下是一个示例:
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.anyRequest().authenticated()
.and()
.formLogin()
.and()
.httpBasic()
.and()
.csrf().disable() // 禁用 CSRF
.headers()
.frameOptions().disable() // 禁用 X-Frame-Options
.and()
.addFilterBefore(corsFilter(), ChannelProcessingFilter.class);
}
private Filter corsFilter() {
return new OncePerRequestFilter() {
@Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {
response.setHeader("Access-Control-Allow-Origin", "http://localhost:8080"); // 允许跨域请求的域名
response.setHeader("Access-Control-Allow-Methods", "GET,POST"); // 允许的请求方法
response.setHeader("Access-Control-Allow-Headers", "Content-Type,Authorization"); // 允许的请求头
response.setHeader("Access-Control-Expose-Headers", "Authorization"); // 允许暴露的响应头
filterChain.doFilter(request, response);
}
};
}
}
以上是两种在 Spring Security 中配置跨域请求的方式。