我使用Thymeleaf在Spring Boot,Spring Security编写应用程序,然后尝试访问我的静态资源文件......
这是我的项目结构......
.
├── mvnw
├── mvnw.cmd
├── nb-configuration.xml
├── pom.xml
├── src
│ ├── main
│ │ ├── java
│ │ │ └── com
│ │ ├── resources
│ │ │ ├── application.properties
│ │ │ ├── static
| | | | |---------------------------------this is image.jpg
│ │ │ ├── templates
│ │ │ └── ValidationMessages.properties
│ │ └── wro
│ │ ├── css
│ │ ├── fonts
│ │ ├── js
│ │ ├── scss
│ │ ├── wro.properties
│ │ └── wro.xml
│ └── test
│ └── java
│ └── com
我在templates / index.html中有HTML文件,我尝试使用标记
<img src="/praca.jpg" alt="sd"/>
为什么我总是收到404错误?我做错了什么?
我的一般初级班:
@SpringBootApplication
public class Application extends WebMvcConfigurerAdapter {
public static void main(String[] args) {
SpringApplication.run(InzynierkaApplication.class, args);
}
}
我的安全级别:
@Configuration
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {
@Autowired
private UserAuthenticationDetails userAuthenticationDetails;
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.userDetailsService(userAuthenticationDetails);
auth.authenticationProvider(authenticationProvider());
}
@Bean
public PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}
@Bean
public DaoAuthenticationProvider authenticationProvider() {
DaoAuthenticationProvider authenticationProvider = new DaoAuthenticationProvider();
authenticationProvider.setUserDetailsService(userAuthenticationDetails);
authenticationProvider.setPasswordEncoder(passwordEncoder());
return authenticationProvider;
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http.csrf().disable()
.authorizeRequests()
.antMatchers("/","/login").permitAll()
.anyRequest().authenticated()
.and()
.formLogin()
.loginPage("/login")
.usernameParameter("username")
.passwordParameter("password")
.defaultSuccessUrl("/",true)
.and()
.logout()
.logoutRequestMatcher(new AntPathRequestMatcher("/logout"))
.logoutUrl("/logout")
.logoutSuccessUrl("/login?logout")
.invalidateHttpSession(true);
}
}
答案 0 :(得分:1)
在模板中,您需要使用百万美元格式自动添加上下文。使用此:
<img th:src="@{/praca.jpg}" alt="sd"/>
/praca.jpg
应该是静态或公共文件夹中图像的完整路径
答案 1 :(得分:0)
我遇到了类似的问题,问题出在Spring安全问题上,因此任何有此问题的人都可以尝试将其静态文件所在的文件夹添加到不需要身份验证的URL列表中
E.g antMatchers("/css/**", "/fonts/**").permitAll()
答案 2 :(得分:0)
这是我在Spring Boot,您的WebConfig
类或扩展WebMvcConfigurerAdapter
的类中处理静态资源的方式,添加以下内容:
@Configuration
public class WebConfig extends WebMvcConfigurerAdapter {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/resources/**")
.addResourceLocations("/resources/");
}
}
然后,在resources
中创建一个static
文件夹,在其中放置所有静态文件或文件夹,例如resources/css
,resources/js
等
例如,从您的视图中可以访问它:
<link rel="stylesheet" href="${pageContext.request.contextPath}/css/skin-black.css">
如果您使用的是Spring Security,请确保添加antMatchers
.antMatchers("/resources/**").permitAll()
.antMatchers("/css/**").permitAll()
.antMatchers("/js/**").permitAll()