一、CorsFilter 代码解读
@Component
这个类被标记为Spring组件,表示它将由Spring容器进行管理。
@Order(Ordered.HIGHEST_PRECEDENCE)
这个注解表明这个组件的加载顺序,Ordered.HIGHEST_PRECEDENCE
表示最高优先级,将在其他过滤器之前执行。
@WebFilter("/*")
这个注解表示这是一个Servlet过滤器,并指定它将拦截所有的请求路径。
public class CorsFilter implements Filter {
定义了名为CorsFilter
的类,实现了Filter
接口,用于处理CORS(跨域资源共享)。
@Overridepublic void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
这是Filter
接口的方法之一,表示过滤器要执行的实际操作。
HttpServletResponse httpServletResponse = (HttpServletResponse) response;
将ServletResponse
强制类型转换为HttpServletResponse
,以便设置HTTP响应头。
httpServletResponse.setHeader("Access-Control-Allow-Origin", "http://localhost:8080");httpServletResponse.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");httpServletResponse.setHeader("Access-Control-Allow-Headers", "x-requested-with");httpServletResponse.setHeader("Access-Control-Max-Age", "3600");
这里设置了CORS相关的HTTP响应头,允许来自http://localhost:8080
的跨域请求,支持的方法有POST、GET、OPTIONS和DELETE,允许的请求头是"x-requested-with",设置了最大响应缓存时间为3600秒。
chain.doFilter(request, response);
继续处理过滤器链,将请求传递给下一个过滤器(如果有的话)或目标资源。
@Overridepublic void init(FilterConfig filterConfig) {}
这是Filter
接口的方法之一,用于初始化过滤器,在这里没有实现具体的初始化逻辑。
@Overridepublic void destroy() {}
这是Filter
接口的方法之一,用于销毁过滤器,在这里没有实现具体的销毁逻辑。
二、整体代码
package com.minster.yanapi.common;import org.springframework.core.Ordered;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;@Component
@Order(Ordered.HIGHEST_PRECEDENCE)
@WebFilter("/*")
public class CorsFilter implements Filter {@Overridepublic void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {HttpServletResponse httpServletResponse = (HttpServletResponse) response;httpServletResponse.setHeader("Access-Control-Allow-Origin", "http://localhost:8080");httpServletResponse.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");httpServletResponse.setHeader("Access-Control-Allow-Headers", "x-requested-with");httpServletResponse.setHeader("Access-Control-Max-Age", "3600");chain.doFilter(request, response);}@Overridepublic void init(FilterConfig filterConfig) {}@Overridepublic void destroy() {}
}