您的代码和配置总体上看起来不错,并且我能够在本地环境中运行它。请从您的中删除 @Component
批注
SimpleCORSFilter,因为您将它用作普通的Servlet过滤器,并且不必成为Spring上下文的一部分。
UPD。 Tomcat
7具有自己的CORS过滤器实现。您可以查看文档和源代码以获取更多详细信息。我已经修改了标题以反映其默认配置,现在应该可以正常工作了。
由于您已经在使用Spring,并且如果您使用的是Spring
4.2或更高版本,则不需要
CorsFilter,而只需用注释您的控制器方法
CrossOrigin。这是关于此的出色文章,值得一读。
也请检查介绍不同平台的CORS配置的不错的资源。
这是我使用普通Filter实现的工作示例:
控制器:
@Controllerpublic class UserController { private static Logger log = Logger.getAnonymousLogger(); @RequestMapping( value = "/register", method = RequestMethod.POST, consumes = "application/x-www-form-urlenpred") @ResponseBody public String register(@RequestParam(value = "user") String username, @RequestParam(value = "password") String password) { log.info(username + " " + password); return "true"; }}过滤:
public class CorsFilter implements Filter { private static final Logger log = Logger.getAnonymousLogger(); @Override public void init(FilterConfig filterConfig) throws ServletException { } @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { log.info("Adding Access Control Response Headers"); HttpServletResponse response = (HttpServletResponse) servletResponse; response.setHeader("Access-Control-Allow-Origin", "*"); response.setHeader("Access-Control-Allow-Credentials", "true"); response.setHeader("Access-Control-Allow-Methods", "POST, GET, HEAD, OPTIONS"); response.setHeader("Access-Control-Allow-Headers", "Origin, Accept, X-Requested-With, Content-Type, Access-Control-Request-Method, Access-Control-Request-Headers"); filterChain.doFilter(servletRequest, servletResponse); } @Override public void destroy() { }}web.xml中的过滤器映射:
<filter> <filter-name>cors</filter-name> <filter-class>com.udalmik.filter.CorsFilter</filter-class> </filter> <filter-mapping> <filter-name>cors</filter-name> <url-pattern>/register</url-pattern> </filter-mapping>
JS从单独的Web应用程序(JQuery)执行请求:
$(document).ready(function() { $('#buttonId').click(function() { $.ajax({ type: "POST", url: "http://localhost:8080/register", success : function(data){ console.log(data); }, data: { user : 'test.user@acme.com', password : 'password' } }); }}


