luodiab 2023-04-09 16:10 采纳率: 68.8%
浏览 19

显示跨域问题问题照片,如何解决?

练习一个后台管理系统项目,在登陆模块集成springSecurity后无法登陆,老是显示跨域问题
问题照片:

img

如图所示,但我的项目是已经做了网关跨域处理的

img

但是不知道为什么还会出现开头的错误,找了网上说是options 的问题,但也不知是不是这个,没解决,请教一下

Security的一些配置

img

  • 写回答

2条回答 默认 最新

  • 桃宝护卫队 2023-04-09 16:27
    关注

    以下回答引用自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 中配置跨域请求的方式。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 4月9日

悬赏问题

  • ¥20 有偿 写代码 要用特定的软件anaconda 里的jvpyter 用python3写
  • ¥20 cad图纸,chx-3六轴码垛机器人
  • ¥15 移动摄像头专网需要解vlan
  • ¥20 access多表提取相同字段数据并合并
  • ¥20 基于MSP430f5529的MPU6050驱动,求出欧拉角
  • ¥20 Java-Oj-桌布的计算
  • ¥15 powerbuilder中的datawindow数据整合到新的DataWindow
  • ¥20 有人知道这种图怎么画吗?
  • ¥15 pyqt6如何引用qrc文件加载里面的的资源
  • ¥15 安卓JNI项目使用lua上的问题