为了账号安全,请及时绑定邮箱和手机立即绑定

SpringBoot 安全配置未按预期工作

SpringBoot 安全配置未按预期工作

明月笑刀无情 2022-12-15 15:58:17
我一直在尝试配置 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 接口中的所有端点都可以在没有我不想要的身份验证的情况下使用。
查看完整描述

3 回答

?
慕的地6264312

TA贡献1817条经验 获得超6个赞

我发现 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/");



查看完整回答
反对 回复 2022-12-15
?
HUH函数

TA贡献1836条经验 获得超4个赞

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


查看完整回答
反对 回复 2022-12-15
?
呼如林

TA贡献1798条经验 获得超3个赞

你为什么不通过 web.ignoring 全局排除静态资源文件?


@Override

public void configure(WebSecurity web) throws Exception {

    web

      .ignoring()

         .antMatchers("/resources/**"); 

  }


查看完整回答
反对 回复 2022-12-15
  • 3 回答
  • 0 关注
  • 81 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信