SpringBoot 安全配置未按预期工作

我一直在尝试配置 Spring Boot 安全性,以便在不需要身份验证的情况下允许某些 url,并且在没有身份验证的情况下不允许任何其他请求。我很难做到这一点。


根据我的理解,anyRequest().authenticated() 要求之前声明的 antMatchers 需要身份验证。


怎么可能达到我的要求。


我的 Http 安全配置


@Override

    protected void configure(HttpSecurity http) throws Exception {





        http.cors().and().csrf().disable().authorizeRequests()

                .requestMatchers(PathRequest.toStaticResources().atCommonLocations()).permitAll()

                .antMatchers(HttpMethod.POST,SIGN_UP_URL).permitAll()

                .antMatchers(HttpMethod.GET,banner_top_url).permitAll()

                .antMatchers(HttpMethod.GET,banner_bottom_url).permitAll()

                .antMatchers(HttpMethod.GET,javascript_url).permitAll()

                .antMatchers(HttpMethod.GET,stylesheet_url).permitAll()

                .antMatchers(HttpMethod.GET,photos_url).permitAll()

                .antMatchers(HttpMethod.GET,transformed_photos_url).permitAll()

                .antMatchers(HttpMethod.GET,preview_url).permitAll()

                .antMatchers(HttpMethod.GET, "/", "/**/*.html", "/static/favicon.ico", "/**/*.js", "/**/*.js.map", "/**/*.css", "/**/*.png", "/**/*.jpg", "/**/*.jpeg", "/**/*.gif", "/**/*.ttf", "/**/*.json", "/**/*.woff", "/**/*.woff2", "/**/*.eot", "/**/*.svg").permitAll()// allows static content from resource folder

                .antMatchers("/error").permitAll() // By default Security framework disables error pages (Unauthrorized)

                .anyRequest().authenticated()

                .and()

               

    }

我假设必须在没有身份验证的情况下授予以下网址访问权限。 SIGN_UP_URL banner_top_url banner_bottom_url javascript_url stylesheet_url photos_url transformed_photos_url preview_url


问题是这一行:.anyRequest().authenticated() 如果我删除它,那么 REST 接口中的所有端点都可以在没有我不想要的身份验证的情况下使用。


明月笑刀无情
浏览 82回答 3
3回答

慕的地6264312

我发现 Spring-Working 符合预期。也就是说,任何 antMAtchers 都将匹配 requestPath 而不是 resourcePath。下面提供了一个例子。*localhost:8080/image.jpg*指向应用程序的根目录,即src/main/resources/static/image.jpg现在为什么将 static 用作资源处理程序,那是因为在staticResourceConfiguration.java类中我有以下行 registry .addResourceHandler("/resources/**") .addResourceLocations("/resources/");    registry.addResourceHandler("/static/**").addResourceLocations("classpath:/static/");

HUH函数

默认情况下,Spring-security 允许传递所有内容。你必须告诉 Spring 什么可以通过,什么不能通过。通过删除 anyRequest().authenticated 你告诉 spring 与你提到的模式匹配的所有东西都被允许去,其余的做你默认做的事情,这意味着,继续。这是 Spring Security 文档:https ://docs.spring.io/spring-security/site/docs/current/reference/htmlsingle/#jc-httpsecurity

呼如林

你为什么不通过 web.ignoring 全局排除静态资源文件?@Overridepublic void configure(WebSecurity web) throws Exception {    web      .ignoring()         .antMatchers("/resources/**");   }
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java