千家信息网

SpringBoot+Spring Security无法实现跨域怎么解决

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,这篇文章主要介绍了SpringBoot+Spring Security无法实现跨域怎么解决的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇SpringBoot+Spring
千家信息网最后更新 2026年11月01日SpringBoot+Spring Security无法实现跨域怎么解决

这篇文章主要介绍了SpringBoot+Spring Security无法实现跨域怎么解决的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇SpringBoot+Spring Security无法实现跨域怎么解决文章都会有所收获,下面我们一起来看看吧。

SpringBoot+Spring Security无法实现跨域

未使用Security时跨域:

import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.beans.factory.annotation.Value;import org.springframework.boot.autoconfigure.AutoConfigureBefore;import org.springframework.context.annotation.Configuration;import org.springframework.format.FormatterRegistry;import org.springframework.web.servlet.config.annotation.*;@Configuration@AutoConfigureBefore(SecurityConfig.class)public class MyMvcConfigurer implements WebMvcConfigurer {    public void addCorsMappings(CorsRegistry registry){        LOGGER.info("跨域已设置");        registry.addMapping("/**")                .allowedOrigins("*")                .allowedMethods("*")                .allowedHeaders("*")                .allowCredentials(true)                .maxAge(3600);    }}

整合Security时发现只用上述方法前后端分离时仍存在跨域问题,

解决方法如下:

@Configuration@AutoConfigureBefore(Swagger2Configuration.class)@EnableWebSecurity@EnableGlobalMethodSecurity(prePostEnabled = true)@Order(-1)public class SecurityConfig extends WebSecurityConfigurerAdapter {    @Override    protected void configure(HttpSecurity http) throws Exception {        http.formLogin()                .loginProcessingUrl("/user/login")                .loginPage("/singIn.html")                .successHandler(moyuAuthenticationSuccessHandler)                .failureHandler(moyuAuthenticationFailureHandler)                .and()                .apply(moyuSocialSecurityConfig)                .and()                .rememberMe()                .tokenRepository(persistentTokenRepository())                .tokenValiditySeconds(3600*24*7)                .userDetailsService(userDetailsService)                .and()                .authorizeRequests()                .antMatchers("/user/login","/login","/singIn.html","**","/**").permitAll()                .anyRequest()                .authenticated()                .and()                .cors()                .and()                .csrf().disable();    }}

重点加入代码:

   .and()   .cors()//新加入   .and()   .csrf().disable();

引用Spring Security 项目的跨域处理

最近项目采用了前后端分离的框架,前端和后台接口没有部署到一个站点,出现了跨域问题,什么是跨域,这里就不再赘述,直接说解决办法。

Spring 解决跨域的方式有很多,个人采用了Crosfilter的方式

具体代码如下:

@Bean    public CorsFilter corsFilter() {        final UrlBasedCorsConfigurationSource urlBasedCorsConfigurationSource = new      UrlBasedCorsConfigurationSource();        final CorsConfiguration corsConfiguration = new CorsConfiguration();        corsConfiguration.setAllowCredentials(true);        corsConfiguration.addAllowedOrigin("*");        corsConfiguration.addAllowedHeader("*");        corsConfiguration.addAllowedMethod("*");        urlBasedCorsConfigurationSource.registerCorsConfiguration("/**", corsConfiguration);        return new CorsFilter(urlBasedCorsConfigurationSource);    }

配置完成后,测试调用,报错401,依然不行。网上查资料得知,跨域请求会进行两次。具体流程见下图:

每次跨域请求,真正请求到达后端之前,浏览器都会先发起一个preflight request,请求方式为OPTIONS 询问服务端是否接受该跨域请求,具体参数如下图:

但是该请求不能携带cookie和自己定义的header。

由于项目中引入了Spring security ,而我使用的token传递方式是在header中使用authorization 字段,这样依赖Spring Security拦截到 preflight request 发现它没有携带token,就会报错401,没有授权。

解决这个问题很简单,可以使用以下配置

让Spring security 不校验preflight request 。

 @Override    public void configure(HttpSecurity http) throws Exception {        ExpressionUrlAuthorizationConfigurer.ExpressionInterceptUrlRegistry registry         = http.authorizeRequests();        registry.requestMatchers(CorsUtils::isPreFlightRequest).permitAll();//让Spring security放行所有preflight request     }

再试就搞定了,但是后端直接配置支持跨域会导致两次请求。还使用另一种方式,使用Nginx 转发一下请求也可以。

关于"SpringBoot+Spring Security无法实现跨域怎么解决"这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对"SpringBoot+Spring Security无法实现跨域怎么解决"知识都有一定的了解,大家如果还想学习更多知识,欢迎关注行业资讯频道。

方式 知识 问题 项目 配置 代码 内容 方法 篇文章 不行 下图 个人 价值 前端 办法 参数 可以使 后台 字段 接口 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 南京欣网互联网络科技有限公司 苏州找大状互联网科技有限公司 期待互联网科技 互联网科技论坛 盛创互联网科技有限公司 太原新华互联网科技学校怎么样 卫星互联网科技股票 互联网科技公司需要的职位 互联网科技有哪些公司 中国科技创新与世界互联网大会 四川慕妮娅互联网科技有限公司 中和天地互联网科技有限公司 恒生互联网科技业指数调整周期 元气玛特互联网科技公司是外包吗 富国互联网科技002692 全球科技与互联网公司市值变化 互联网高科技行业有哪些企业 版纳互联网科技选哪家 广州三三互联网科技有限公司 互联网科技对化妆品行业 南京欣网互联网络科技有限公司 山东特亿宝互联网科技有限公司 互联网 科技创业 奇酷互联网科技 有木互联网科技 科技与互联网的利与弊 工业互联网等科技实现智能化赋能 科技信息时代互联网发展 互联网对科技影响 互联网金融金融科技
0