我使用Spring(我没有使用Spring启动)和Spring安全OAuth2开发RESTful应用程序以实现端点安全性。
为了在Web浏览器中允许CORS请求,我在我的AbstractAnnotationConfigDispatcherServletInitializer
onStartup
方法中为我的oauth端点添加了一个CORS过滤器,如下所示:
@Override
public void onStartup(ServletContext servletContext) throws ServletException {
servletContext.addFilter("simpleCorsFilter",new CORSFilter()).addMappingForUrlPatterns(null,false,"/oauth/token");
super.onStartup(servletContext);
}
以及WebMvcConfigurer
中的其他端点:
@ComponentScan("com.my.package")
@EnableWebMvc
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**");
}
}
我的CORSFilter的来源可以找到here。
这些解决方案正在发挥作用,至少不像我预期的那样完整。过滤器有时在Tomcat上进行部署,有时则不行。 我相信它是因为Tomcat上的过滤器顺序。
我在SO上已经阅读了很多类似的问题,其中大多数都是建议我没有使用的Spring启动解决方案。我也尝试过使用Tomcat的corsfilter,但这对我也不起作用。
有时我必须重启我的Tomcat超过10次才能使所有内容按预期工作。