我有两个项目。一个是最近完成的,另一个正在开发中。目前,在项目中,我使用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。 如您所见,使用的静态资源与上一个项目相同。
请解释为什么它不起作用以及如何解决?我受了两天,我听不懂。