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

在Spring Boot和Spring Security应用程序中提供静态Web资源

/ 猿问

在Spring Boot和Spring Security应用程序中提供静态Web资源

慕运维1137616 2019-09-21 14:49:08

我正在尝试开发Spring Boot Web应用程序并使用Spring Security Java配置对其进行保护。


按照Spring博客中的建议,将我的静态Web资源放置在“ src / main / resources / public ” 中后,我就可以获得静态资源。即https://localhost/test.html在浏览器中点击确实提供html内容。


问题

在启用Spring Security之后,访问静态资源URL需要身份验证。


我的相关的Spring Security Java配置看起来像这样:


@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

    }

我应该如何配置antMatchers以允许将静态资源放在src / main / resources / public中?


查看完整描述

3 回答

?
斯蒂芬大帝

有几件事要注意:


Ant匹配器将根据请求路径而不是文件系统上资源的路径进行匹配。

放置的资源src/main/resources/public将从您的应用程序的根目录开始。例如src/main/resources/public/hello.jpg将从http://localhost:8080/hello.jpg

这就是为什么您当前的匹配器配置不允许访问静态资源的原因。为了/resources/**工作,您必须将资源放入src/main/resources/public/resources并在处进行访问http://localhost:8080/resources/your-resource。


使用Spring Boot时,您可能需要考虑使用其默认值,而不是添加额外的配置。春天开机后,默认,允许访问/css/**,/js/**,/images/**,和/**/favicon.ico。例如,您可以拥有一个名为的文件src/main/resources/public/images/hello.jpg,而无需添加任何额外的配置,http://localhost:8080/images/hello.jpg无需登录即可访问该文件。您可以在允许对Bootstrap CSS文件进行访问的Web方法安全性示例中看到此操作。无需任何特殊配置。


查看完整回答
反对 回复 2019-09-21
?
莫回无

 @Override

      public void configure(WebSecurity web) throws Exception {

        web

          .ignoring()

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

      }

忽略任何以“ / resources /”开头的请求。这与使用XML名称空间配置时配置http @ security = none相似。


查看完整回答
反对 回复 2019-09-21
?
holdtom

经过20多个小时的研究,这是最终的解决方案。

步骤1.将“ MvcConfig.java”添加到您的项目。


import org.springframework.context.annotation.Configuration;

import org.springframework.web.servlet.config.annotation.EnableWebMvc;

import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;

import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;


@Configuration

public class MvcConfig extends WebMvcConfigurerAdapter {

    @Override

    public void addResourceHandlers(ResourceHandlerRegistry registry) {

        registry

                .addResourceHandler("/resources/**")

                .addResourceLocations("/resources/");

    }

}

步骤2.将configure(WebSecurity web)覆盖添加到SecurityConfig类


@Override

    public void configure(WebSecurity web) throws Exception {

        web

                .ignoring()

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

    }

步骤3.将所有静态资源放在webapp / resources /中。


查看完整回答
反对 回复 2019-09-21

添加回答

回复

举报

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