我在Spring Boot, Spring Security with Thymeleaf中编写应用程序,我试图访问我的静态资源文件…
这是我的项目结构…
.
├── 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
我有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);
}
}
在您的模板中,您需要使用胸里叶格式来自动添加上下文。使用:
<img th:src="@{/praca.jpg}" alt="sd"/>
/praca.jpg
应该是从静态或公共文件夹
我有一个类似的问题,问题与spring安全性有关,所以任何有这个问题的人都可以尝试将其静态文件所在的文件夹添加到不需要身份验证的url列表中例如:antMatchers("/css/**", "/fonts/**").permitAll()
这就是我在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()