springboot中周末配置Access-Control-Allow-Origin
时间: 2024-07-30 14:01:25 浏览: 114
在Spring Boot应用中,如果你想要允许跨域请求并在周末(周六、周日)特定时间开启Access-Control-Allow-Origin策略,你可以创建一个自定义过滤器(Filter),例如使用`@CrossOrigin`注解,并通过`@PreAuthorize`或`@ConditionalOnDate`来控制其生效的时间。
首先,创建一个定制的过滤器,比如`WeekendCorsFilter.java`:
```java
import org.springframework.boot.actuate.autoconfigure.web.server.ManagementServerProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.HttpHeaders;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;
@Configuration
@Component
public class WeekendCorsFilter {
private final ManagementServerProperties management;
public WeekendCorsFilter(ManagementServerProperties management) {
this.management = management;
}
@Bean(name = "weekendCorsFilter")
public WebMvcConfigurer corsConfigurer() {
return (configurer) -> {
configurer.addCorsConfiguration(
"/**", // 允许所有的路径
headers -> {
if (isWeekend()) { // 检查是否为周末
headers.setAllowCredentials(true); // 设置允许凭证
headers.addAllowedHeader("*"); // 允许所有头信息
headers.addAllowedMethod("*"); // 允许所有HTTP方法
headers.addAllowedOrigin("*"); // 允许来自任何源的请求
} else {
// 非周末则按默认设置或你自己的规则处理
configurer.cors().allowCredentials(false);
configurer.cors().allowedOrigins("http://your-origin.com");
}
});
};
}
private boolean isWeekend() {
String[] daysOfWeek = {"Saturday", "Sunday"};
for (String day : daysOfWeek) {
if (management.getEndpointProperties().getWeb().getDatepatterns().contains(day)) {
return true; // 如果找到对应的日期模式,则为周末
}
}
return false;
}
}
```
然后在启动类或Spring Boot Actuator配置中启用这个过滤器:
```java
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
@Autowired
private WeekendCorsFilter weekendCorsFilter;
// ...
@PostConstruct
public void init() {
weekendCorsFilter.corsConfigurer(); // 加载配置
}
}
```
阅读全文