SpringBoot安全配置无法正常工作

时间:2019-05-24 21:30:28

标签: java spring spring-boot security

我一直在尝试配置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()
                .exceptionHandling().authenticationEntryPoint(jwtAuthenticationEntryPoint)
                .and().addFilterBefore(jwtExceptionHandler,CorsFilter.class)
                .addFilter(new JWTAuthorizationFilter(authenticationManager()))
                .addFilter(new JWTAuthenticationFilter(authenticationManager()))


                // this disables session creation on Spring Security
                .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)
                .and().formLogin().disable();
    }

我假设必须授予以下URL未经身份验证的访问权限。 SIGN_UP_URL banner_top_url banner_bottom_url javascript_url stylesheet_url photos_url transform_photos_url Preview_url

问题是这行:.anyRequest()。authenticated() 如果删除它,则REST接口中的所有端点都可以使用,而无需身份验证,这是我不希望的。

3 个答案:

答案 0 :(得分:0)

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

@Override
public void configure(WebSecurity web) throws Exception {
    web
      .ignoring()
         .antMatchers("/resources/**"); 
  }

答案 1 :(得分:0)

默认情况下,Spring-security允​​许传递所有内容。您必须告诉Spring什么可以通过,什么不能通过。通过删除anyRequest()。authenticated,您可以告诉Spring与您提到的模式匹配的所有内容都可以进行,而其余的则默认执行您的操作,即继续。这是Spring Security文档:https://docs.spring.io/spring-security/site/docs/current/reference/htmlsingle/#jc-httpsecurity

答案 2 :(得分:0)

我发现Spring-Working符合预期。话虽如此,任何antMatcher都将匹配requestPath,而不匹配resourcePath。下面提供了一个示例。

*localhost:8080/image.jpg*

指向应用程序的根目录 src / main / resources / static / image.jpg

现在为什么将static用作资源处理程序,这是因为在 staticResourceConfiguration.java 类中,我有以下几行 注册表                 .addResourceHandler(“ / resources / **”)                 .addResourceLocations(“ / resources /”);

    registry.addResourceHandler("/static/**").addResourceLocations("classpath:/static/");