首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >弹簧防盗滤波器

弹簧防盗滤波器
EN

Stack Overflow用户
提问于 2016-11-04 08:46:52
回答 16查看 212.6K关注 0票数 60

我们将Spring Security添加到现有项目中。

从这一刻起,我们从服务器上得到一个401 No 'Access-Control-Allow-Origin' header is present on the requested resource错误。

这是因为没有将Access-Control-Allow-Origin头附加到响应。为了解决这个问题,我们在注销筛选器之前添加了我们自己的过滤器,它位于Filter链中,但是过滤器不适用于我们的请求。

我们的错误:

XMLHttpRequest无法加载http://localhost:8080/getKunden。请求的资源上没有“访问-控制-允许-原产地”标题。因此,http://localhost:3000源是不允许访问的。响应具有HTTP状态代码401。

我们的安全配置:

代码语言:javascript
复制
@EnableWebSecurity
@Configuration
@ComponentScan("com.company.praktikant")
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {

@Autowired
private MyFilter filter;

@Override
public void configure(HttpSecurity http) throws Exception {
    final UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
    final CorsConfiguration config = new CorsConfiguration();

    config.addAllowedOrigin("*");
    config.addAllowedHeader("*");
    config.addAllowedMethod("GET");
    config.addAllowedMethod("PUT");
    config.addAllowedMethod("POST");
    source.registerCorsConfiguration("/**", config);
    http.addFilterBefore(new MyFilter(), LogoutFilter.class).authorizeRequests()
            .antMatchers(HttpMethod.OPTIONS, "/*").permitAll();
}

@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
}
}

我们的过滤器

代码语言:javascript
复制
@Component
public class MyFilter extends OncePerRequestFilter {

@Override
public void destroy() {

}

private String getAllowedDomainsRegex() {
    return "individual / customized Regex";
}

@Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain)
        throws ServletException, IOException {

    final String origin = "http://localhost:3000";

    response.addHeader("Access-Control-Allow-Origin", origin);
    response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS");
    response.setHeader("Access-Control-Allow-Credentials", "true");
    response.setHeader("Access-Control-Allow-Headers",
            "content-type, x-gwt-module-base, x-gwt-permutation, clientid, longpush");

    filterChain.doFilter(request, response);

}
}

我们的申请

代码语言:javascript
复制
@SpringBootApplication
public class Application {
public static void main(String[] args) {
    final ApplicationContext ctx = SpringApplication.run(Application.class, args);
    final AnnotationConfigApplicationContext annotationConfigApplicationContext = new AnnotationConfigApplicationContext();
    annotationConfigApplicationContext.register(CORSConfig.class);
    annotationConfigApplicationContext.refresh();
}
}

我们的过滤器是从弹簧启动注册的:

2016-11-04 :19:51.494 INFO 9704

我们生成的过滤链:

2016-11-04 :19:52.729 INFO 9704 -- ost-startStop-1 o.s.s.web.DefaultSecurityFilterChain :创建过滤链:o.s.s.web.DefaultSecurityFilterChain com.company.praktikant.MyFilter@5ba65db2,org.springframework.security.web.authentication.logout.LogoutFilter@2330834f,org.springframework.security.web.savedrequest.RequestCacheAwareFilter@396532d1,org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter@4fc0f1a2,org.springframework.security.web.authentication.AnonymousAuthenticationFilter@2357120f,org.springframework.security.web.session.SessionManagementFilter@10867bfb,org.springframework.security.web.access.ExceptionTranslationFilter@4b8bf1fb,org.springframework.security.web.access.intercept.FilterSecurityInterceptor@42063cf1

回应:响应标头

我们也尝试了春天的解决方案,但它没有成功!我们控制器中的注释@十字路口也没有帮助。

编辑1:

尝试了@Piotr所以łtysiak的解决方案。cors过滤器没有在生成的过滤器链中列出,我们仍然得到相同的错误。

2016-11-04 10:22:49.881 INFO 8820 -- ost-startStop-1 o.s.s.web.DefaultSecurityFilterChain :创建过滤链:o.s.s.web.DefaultSecurityFilterChainorg.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter@3990c331,org.springframework.security.web.authentication.ui.DefaultLoginPageGeneratingFilter@1e8d4ac1,org.springframework.security.web.authentication.www.BasicAuthenticationFilter@2d61d2a4,org.springframework.security.web.savedrequest.RequestCacheAwareFilter@380d9a9b,org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter@abf2de3,org.springframework.security.web.authentication.AnonymousAuthenticationFilter@2a5c161b,org.springframework.security.web.session.SessionManagementFilter@3c1fd3e5,org.springframework.security.web.access.ExceptionTranslationFilter@3d7055ef,org.springframework.security.web.access.intercept.FilterSecurityInterceptor@5d27725a

顺便说一句,我们使用的是春季安全版本4.1.3。

EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40418441

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档