java oauth跨域问题怎么解决

时间:2024-10-13 12:19:49
@Configuration
@EnableResourceServer
public class ResourceServiceConfig extends ResourceServerConfigurerAdapter {

    @Override
    public void configure(HttpSecurity http) throws Exception {
        http
            // 针对所有的请求
            .authorizeRequests().and().authorizeRequests()
            .antMatchers("/login")
            .permitAll()
            // 路径下的请求做认证
            .anyRequest().authenticated().and().httpBasic().and()
            // 开启跨域配置
            .cors().configurationSource(corsConfigurationSource()).and().csrf().disable();
    }

    CorsConfigurationSource corsConfigurationSource() {
        CorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        CorsConfiguration corsConfiguration = new CorsConfiguration();
        // 同源配置,*表示任何请求都视为同源,若需指定ip和端口可以改为如“localhost:8080”,多个以“,”分隔;
        corsConfiguration.addAllowedOrigin("*");
        // header,允许哪些header,本案中使用的是token,此处可将*替换为token;
        corsConfiguration.addAllowedHeader("*");
        // 允许的请求方法,PSOT、GET等
        corsConfiguration.addAllowedMethod("*");
        // 配置允许跨域访问的url
        ((UrlBasedCorsConfigurationSource)source).registerCorsConfiguration("/**", corsConfiguration);
        return source;
    }

    /**
     * @Author tdh
     * @Description 自定义无效TOKEN返回体
     * @Date 2022/7/27
     */
    @Override
    public void configure(ResourceServerSecurityConfigurer resources) {
        OAuth2AuthenticationEntryPoint authenticationEntryPoint = new OAuth2AuthenticationEntryPoint();
        authenticationEntryPoint.setExceptionTranslator(new CustomExceptionTranslator());
        resources.authenticationEntryPoint(authenticationEntryPoint);
    }

}
  1. 在Spring框架中,可以通过在Controller的方法上添加@CrossOrigin注解来实现跨域访问。例如:
@CrossOrigin(origins = "http://localhost:8080")
@GetMapping("/api/data")
public ResponseEntity<String> getData() {
    // 返回数据
}

复制代码

  1. 在Spring Security中,可以通过配置HttpSecurity对象来实现跨域访问。例如:
@Override
protected void configure(HttpSecurity http) throws Exception {
    http.cors().and().csrf().disable();
}

复制代码

  1. 如果使用Spring Boot,可以通过在application.properties或application.yml文件中配置跨域访问。例如:

在application.properties中添加以下配置:

spring.mvc.cors.allowed-origins=http://localhost:8080
spring.mvc.cors.allowed-methods=GET,POST

复制代码

在application.yml中添加以下配置:

spring:
  mvc:
    cors:
      allowed-origins: http://localhost:8080
      allowed-methods: GET,POST

复制代码

通过以上方法配置跨域资源共享策略,可以解决Java OAuth跨域访问的问题。