@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);
}
}
- 在Spring框架中,可以通过在Controller的方法上添加@CrossOrigin注解来实现跨域访问。例如:
@CrossOrigin(origins = "http://localhost:8080")
@GetMapping("/api/data")
public ResponseEntity<String> getData() {
// 返回数据
}
复制代码
- 在Spring Security中,可以通过配置HttpSecurity对象来实现跨域访问。例如:
@Override
protected void configure(HttpSecurity http) throws Exception {
http.cors().and().csrf().disable();
}
复制代码
- 如果使用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跨域访问的问题。