Sirviendo recursos web estáticos en la aplicación Spring Boot y Spring Security

Resuelto Kumar Sambhav asked hace 10 años • 11 respuestas

Estoy intentando desarrollar la aplicación web Spring Boot y protegerla utilizando la configuración Java de seguridad Spring.

Después de colocar mis recursos web estáticos en ' src/main/resources/public ' como se recomienda aquí en el blog de Spring , puedo obtener los recursos estáticos. es decir, presionar https://localhost/test.htmlen el navegador muestra el contenido html.

Problema

Después de habilitar Spring Security, acceder a la URL del recurso estático requiere autenticación.

Mi configuración relevante de Spring Security Java se ve así: -

@Override
    protected void configure(HttpSecurity http) throws Exception {
        // @formatter:off
        http.
            authorizeRequests()
                .antMatchers("/","/public/**", "/resources/**","/resources/public/**")
                    .permitAll()
                .antMatchers("/google_oauth2_login").anonymous()
                    .anyRequest().authenticated()
                .and()
                .formLogin()
                    .loginPage("/")
                    .loginProcessingUrl("/login")
                    .defaultSuccessUrl("/home")
                    .and()
                    .csrf().disable()
                    .logout()
                        .logoutSuccessUrl("/")
                        .logoutUrl("/logout") // POST only
                .and()
                    .requiresChannel()
                    .anyRequest().requiresSecure()
                .and()
                    .addFilterAfter(oAuth2ClientContextFilter(),ExceptionTranslationFilter.class)
                    .addFilterAfter(googleOAuth2Filter(),OAuth2ClientContextFilter.class)
                .userDetailsService(userService);
        // @formatter:on
    }

¿Cómo debo configurar antMatchers para permitir recursos estáticos colocados dentro de src/main/resources/public?

Kumar Sambhav avatar Jul 24 '14 00:07 Kumar Sambhav
Aceptado

Hay un par de cosas a tener en cuenta:

  • Los comparadores Ant coinciden con la ruta de la solicitud y no con la ruta del recurso en el sistema de archivos.
  • Los recursos colocados src/main/resources/publicse entregarán desde la raíz de su aplicación. Por ejemplo src/main/resources/public/hello.jpgse serviría desdehttp://localhost:8080/hello.jpg

Es por eso que su configuración de comparación actual no ha permitido el acceso a los recursos estáticos. Para /resources/**que funcione, tendrías que colocar los recursos src/main/resources/public/resourcesy acceder a ellos en http://localhost:8080/resources/your-resource.

Mientras usa Spring Boot, es posible que desee considerar usar sus valores predeterminados en lugar de agregar configuración adicional. Spring Boot, de forma predeterminada, permitirá el acceso a /css/**, /js/**, /images/**y /**/favicon.ico. Podría, por ejemplo, tener un archivo con nombre src/main/resources/public/images/hello.jpgy, sin agregar ninguna configuración adicional, sería accesible http://localhost:8080/images/hello.jpgsin tener que iniciar sesión. Puede ver esto en acción en la prueba de humo de seguridad del método web donde se permite el acceso al CSS Bootstrap. archivo sin ninguna configuración especial.

Andy Wilkinson avatar Jul 23 '2014 20:07 Andy Wilkinson
  @Override
      public void configure(WebSecurity web) throws Exception {
        web
          .ignoring()
             .antMatchers("/resources/**"); // #3
      }

Ignore cualquier solicitud que comience con "/resources/". Esto es similar a configurar http@security=none cuando se utiliza la configuración del espacio de nombres XML.

RPaul avatar Jul 23 '2014 18:07 RPaul