我正在尝试配置Spring Security性,使其支持CORS。多亏了这篇文章,Spring security CORS Filter,我已经使用Spring Boot在本地主机上运行了,配置代码如下:
@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.cors()
.and()
.antMatcher("/api/**")
.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)
.and()
.authorizeRequests()
.antMatchers(HttpMethod.POST, "/api/login").permitAll()
.antMatchers(HttpMethod.GET, "/api/websocket/**").permitAll()
.antMatchers("/api/**").authenticated()
.and()
.addFilterBefore(new JWTLoginFilter("/api/login", HttpMethod.POST, authenticationManager(), tokenAuthenticationService, myUserService), UsernamePasswordAuthenticationFilter.class)
.addFilterBefore(new JWTAuthenticationFilter(tokenAuthenticationService), UsernamePasswordAuthenticationFilter.class)
.csrf().disable();
}
@Bean
public CorsConfigurationSource corsConfigurationSource() {
final CorsConfiguration configuration = new CorsConfiguration();
configuration.setAllowedOrigins(ImmutableList.of("*"));
configuration.setAllowedMethods(ImmutableList.of("HEAD",
"GET", "POST", "PUT", "DELETE", "PATCH"));
// setAllowCredentials(true) is important, otherwise:
// The value of the 'Access-Control-Allow-Origin' header in the response must not be the wildcard '*' when the request's credentials mode is 'include'.
configuration.setAllowCredentials(true);
// setAllowedHeaders is important! Without it, OPTIONS preflight request
// will fail with 403 Invalid CORS request
configuration.setAllowedHeaders(ImmutableList.of("Authorization", "Cache-Control", "Content-Type"));
final UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
source.registerCorsConfiguration("/**", configuration);
return source;
}
}
但是当我在远程Tomcat服务器上部署我的应用程序时,它不起作用:
Access to XMLHttpRequest at 'http://xxx:9080/yyy/api/user/findByLogin/?login=zzz' from origin 'http://xxx:10080' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.
我的配置类是否足够,还是需要在Tomcat设置中设置一些内容?谢谢你们
检查tomcat服务器是否在$CATALINA_BASE/conf/web中配置了冲突的CORS过滤器。xml
Tomcat也有自己的cors过滤器,如果您在Tomcat之前使用其他服务器(如nodejs、apache服务器vs),也要检查它的cors过滤器。
Spring security提供了一种在http configurer中配置CORS的方法,有一种更干净的方法将CORS过滤器添加到应用程序中-
@Component
@Order(Ordered.HIGHEST_PRECEDENCE)
public class MyCORSFilterClass implements Filter {
@Override
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain)
throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) res;
response.setHeader("Access-Control-Allow-Origin", request.getHeader("Origin"));
response.setHeader("Access-Control-Allow-Credentials", "true");
response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
response.setHeader("Access-Control-Max-Age", "3600");
response.setHeader("Access-Control-Allow-Headers", "Content-Type, Accept, X-Requested-With, remember-me");
chain.doFilter(req, res);
}
@Override
public void init(FilterConfig filterConfig) {
}
@Override
public void destroy() {
}
}
排序具有最高优先级的过滤器确保MyCORSFilterClassimementation的javax.servlet.过滤器是链中的第一个。
我的项目是在Windows-SpringIDE-TomcatV8上进行的。0用于windows,MySql5。该项目还涉及java7、Tomcat7。我所有的课都是自动注释的。问题是,当我在Centos上部署project时,我有java8、Tomcat8和一个异常。请提出一些解决问题的建议。 以下是linux上的例外情况: 组织。springframework。豆。工厂BeanCreationE
我正在使用Vagrant部署到Ubuntu Linux,并尝试启动服务。 然后我跟踪,发现: ?tomcat8.service-lsb:启动tomcat。加载:加载(/etc/init.d/tomcat8) active:失败(结果:exit-code)自2016-03-28 09:44:17 GMT;5s前 文档:人:systemd-sysv-generator(8) 进程:884 execst
我正在将tomcat服务器从tomcat7升级到Tomcat8。但Struts1.1似乎不能在Tomcat8上工作。有人知道Tomcat8不支持Struts1.1吗。 下面是堆栈跟踪
我使用EC2 amazon linux+Java1.8+Tomcat8。安装程序如下: 但是我的spring mvc示例程序不工作,Tomcat8的示例程序也不工作。 我不知道为什么。请帮帮我
https://mvnrepository.com/artifact/org.apache.tomcat.maven/tomcat8-maven-plugin 当我使用运行时,我得到以下错误: 但是,rt.jar确实存在,并且我的JAVA_HOME环境设置正确: MVN-V Apache Maven 3.3.9(BB52D8502B132EC0A5A3F4C09453C07478323DC5;20
本文向大家介绍docker安装tomcat8的实现方法,包括了docker安装tomcat8的实现方法的使用技巧和注意事项,需要的朋友参考一下 一、docker安装tomcat8 1、查找Docker Hub上的tomcat镜像 2、拉取tomcat镜像 3、使用tomcat默认的配置来启动一个tomcat容器 4、拷贝容器内tomcat配置文件和日志到本地准备映射 5、停止tomcat,并删除容
我已经安装了Tomcat7和8,但是如果我进入服务器选项卡并单击Create new Server,我会发现:它既不允许我插入服务器名称,也不允许我单击Finish。
解释我症状的最接近stackoverflow的问题是:如何在Tomcat7中部署Grails 3.0.1 war文件? 我正在将Grails 2.3.4应用程序升级到Grails 3.1.10,一切都在使用“Grails run app”。 当我部署到一场战争中时,任何url都只能得到404。 战争在卡塔利纳部署时没有任何错误信息。出来 tomcat访问日志显示了我的访问尝试。(不是linux问题