I'm experience problems loading static resources like images, css styles, etc.... in spring 5 when I add security, without security it load ok
THis is how I done.
First, I create a project using Spring Starter Project in Eclipse Photon
Spring Boot Version: 2.2.6
Add some dependencies:
Spring web
Thymeleaf
Spring Security
Spring Boot DevTools
Spring Boot Actuator
Run the project and I use generated security password and everything ok.
Now I add statics resources
So I create a folder called /assets/imgs
in src/main/resources/static/
I that folder I add a fake image to use in, called fake-image.png
I create a class, with a user and password and patterns to permit my resources.
@Configuration
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests().antMatchers("/resources/**", "/static/**","/src/main/resources/**").permitAll().and()
.formLogin().loginPage("/login").permitAll()
.usernameParameter("username").passwordParameter("password")
.defaultSuccessUrl("/loginsuccess").permitAll().and()
.logout().permitAll();
}
@Bean
public BCryptPasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}
@Autowired
public void configureGlobal(AuthenticationManagerBuilder builder) throws Exception {
PasswordEncoder encoder = passwordEncoder();
UserBuilder users = User.builder().passwordEncoder(encoder::encode);
//User to login
builder.inMemoryAuthentication()
.withUser(users.username("admin").password("q").roles("ADMIN"));
}
}
I create a class to add my login form
@EnableWebMvc
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void addViewControllers(ViewControllerRegistry registry) {
registry.addViewController("/login").setViewName("login");
registry.addViewController("/").setViewName("login");
}
}
Finally I add a login.html page like this, to show a simple image
<!DOCTYPE html>
<html lang="es" xmlns="http://www.w3.org/1999/xhtml"
xmlns:th="http://www.thymeleaf.org">
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport"
content="width=device-width, initial-scale=1, shrink-to-fit=no" />
<!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags -->
<meta name="description" content="" />
<meta name="author" content="" />
<meta name="ctx" th:content="@{/}" />
<title>Test Static Files</title>
</head>
<body>
<div class="container">
<div class="row no-gutters mt-3">
<div class="col columna-banner">
<img class="img-fluid rounded login-banner-image"
th:src="@{/assets/imgs/fake-image.png}" />
</div>
</div>
</div>
</body>
</html>
In eclipse console I get this warning message:
WARN 1434 --- [nio-8080-exec-2] o.s.web.servlet.PageNotFound : No mapping for GET /assets/imgs/fake-image.png
UPDATE 1:
Added code to github:
https://github.com/davisoski/stackoverflow-static-files
Am I missing something?
Any suggestion?
Thanks