OncePerRequestFilter 过滤cors例子
时间: 2023-10-18 10:04:44 浏览: 173
当你需要在每个请求中进行 CORS(跨域资源共享)过滤时,你可以使用 Spring Framework 提供的 `OncePerRequestFilter` 类来实现。下面是一个简单的示例:
首先,创建一个继承自 `OncePerRequestFilter` 的过滤器类,比如命名为 `CorsFilter`:
```java
import org.springframework.web.filter.OncePerRequestFilter;
import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
public class CorsFilter extends OncePerRequestFilter {
@Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain)
throws ServletException, IOException {
response.setHeader("Access-Control-Allow-Origin", "*");
response.setHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS");
response.setHeader("Access-Control-Allow-Headers", "Authorization, Content-Type");
if ("OPTIONS".equals(request.getMethod())) {
response.setStatus(HttpServletResponse.SC_OK);
} else {
filterChain.doFilter(request, response);
}
}
}
```
在上述示例中,我们在 `doFilterInternal` 方法中设置了 CORS 相关的响应头。这里的设置是简单示例,你可以根据需要进行修改和定制。
接下来,在你的 Spring Boot 应用程序的配置类中注册该过滤器:
```java
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class AppConfig {
@Bean
public FilterRegistrationBean<CorsFilter> corsFilter() {
FilterRegistrationBean<CorsFilter> registrationBean = new FilterRegistrationBean<>();
registrationBean.setFilter(new CorsFilter());
registrationBean.addUrlPatterns("/*");
return registrationBean;
}
// 其他配置...
}
```
在上述示例中,我们使用 `FilterRegistrationBean` 来注册过滤器,并将其应用于所有的 URL 匹配模式(`"/*"`)。
这样,当每个请求到达应用程序时,该过滤器都会被调用,并添加相应的 CORS 头信息到响应中,以允许跨域请求。
以上是一个基本的 OncePerRequestFilter 过滤器的 CORS 示例。根据你的具体需求,你可能需要对示例代码进行修改和扩展。
阅读全文