我无法将Resource Handler Spring Boot配置为处理静态资源

时间:2019-05-31 09:59:17

标签: java spring spring-boot spring-mvc

我有两个项目。一个是最近完成的,另一个正在开发中。目前,在项目中,我使用WebMvcConfigurer的相同实现,但是问题是,在一个project中,所有静态资源都已加载,而在second中,则没有。配置完全相同。

我使用addResourceHandlers (ResourceHandlerRegistry registry)处理静态资源。

我的WebMvcConfigurer实现:

@Configuration
public class McvConfig implements WebMvcConfigurer {
    @Value("${upload.path}")
    private String uploadPath;

    @Override
    public void addViewControllers(ViewControllerRegistry registry) {
        registry.addViewController("/").setViewName("index");
    }

    @Bean
    public RestTemplate getRestTemplate() {
        return new RestTemplate();
    }

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/img/**")
                .addResourceLocations("file:///" + uploadPath + "/");
    }
}

WebMvcConfigurer来自正在运行的项目。如您所见,它们完全重合。

为了显示静态资源,目前,我使用<img src="/img/${course.imgName}">

我的WebSecurityConfigurerAdapter实现被允许使用资源而无需登录帐户(.antMatchers("/", "/registration", "/activate/*", "/img/*").permitAll())。

@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
    private final UserService userService;
    private final PasswordEncoder passwordEncoder;

    public WebSecurityConfig(UserService userService, PasswordEncoder passwordEncoder) {
        this.userService = userService;
        this.passwordEncoder = passwordEncoder;
    }

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
                .authorizeRequests()
                    .antMatchers("/", "/registration", "/activate/*", "/img/*").permitAll()
                    .anyRequest().authenticated()
                .and()
                    .formLogin()
                    .loginPage("/login")
                    .permitAll()
                .and()
                    .rememberMe()
                .and()
                    .logout()
                    .permitAll();
    }

    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.userDetailsService(userService)
                .passwordEncoder(passwordEncoder);
    }
}

After starting the application在屏幕截图中,您可以看到未显示图片。

生成的页面源代码类似于this

但是,当您启动另一个应用程序时,静态资源是processed

生成的页面源代码看起来像this。 如您所见,使用的静态资源与上一个项目相同。

请解释为什么它不起作用以及如何解决?我受了两天,我听不懂。

0 个答案:

没有答案