Я уточняю, что я студент французского языка на первом курсе Java Developper.Я знаю, что эта тема уже решена и решена, но любые решения, которые я видел онлайн, работали для меня.
Файлы CSS просто не работают в моем веб-приложении (многомодульном).Очевидно, что-то я не вижу.Я пытаюсь решить эту проблему уже 3 дня ...
Если бы кто-то мог взглянуть на мой код, я был бы очень признателен ...
Если кому-то это нужно, мой репозиторий github (эта ссылка должна идти на мою ветку объектов ..)
Мой pom-файл в слое webapp:
//...
<dependencies>
<!-- =-=-=-= Module =-=-=-= -->
<dependency>
<groupId>org.thibaut</groupId>
<artifactId>model</artifactId>
</dependency>
<dependency>
<groupId>org.thibaut</groupId>
<artifactId>business</artifactId>
</dependency>
<!-- =-=-=-= Framework =-=-=-= -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
<groupId>org.webjars</groupId>
<artifactId>webjars-locator</artifactId>
</dependency>
<dependency>
<groupId>org.webjars</groupId>
<artifactId>bootstrap</artifactId>
</dependency>
<dependency>
<groupId>org.webjars</groupId>
<artifactId>jquery</artifactId>
</dependency>
//...
My Thymeleaf view:
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<link rel="stylesheet"
href="/webjars/bootstrap/4.1.3/css/bootstrap.min.css" />
<script src="/webjars/bootstrap/4.1.3/js/bootstrap.min.js"></script>
<script src="/webjars/jquery/3.3.1-1/jquery.min.js"></script>
<link rel="stylesheet" type="text/css" media="all"
th:href="@{/css/atlas.css}" href="../static/css/atlas.css"/>
</head>
<body>
<div class="container">
<table class="table table-bordered table-striped table-condensed">
<caption>
<h3>LIST OF ALL ATLASES</h3>
</caption>
<thead>
<tr>
<th>NAME</th>
<th>AVAILABLE</th>
<th>CREATION DATE</th>
<th>OWNER</th>
</tr>
</thead>
<tbody>
<tr th:each="atlas:${atlases}">
<td th:text="${atlas.name}"></td>
<td th:text="${atlas.available}"></td>
<td th:text="${atlas.createDate}"></td>
<td th:text="${atlas.user.userName}"></td>
</tr>
</tbody>
</table>
</div>
</body>
</html>
Мой класс WebSecurityConfig:
@Configuration
//@EnableWebSecurity
//--> I saw somewhere that this annotation can be problematic with spring security and CSS
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
private UserDetailsServiceImpl userDetailsService;
@Autowired
private DataSource dataSource;
@Bean
public BCryptPasswordEncoder passwordEncoder() {
BCryptPasswordEncoder bCryptPasswordEncoder = new BCryptPasswordEncoder();
return bCryptPasswordEncoder;
}
@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
// Setting Service to find User in the database.
// And Setting PassswordEncoder
auth.userDetailsService(userDetailsService).passwordEncoder(passwordEncoder());
}
@Override
public void configure( WebSecurity webSecurity) throws Exception {
webSecurity.ignoring()
// ignore all URLs that start with /resources/ or /static/
.antMatchers("/resources/**", "/css/**");
}
@Override
protected void configure( HttpSecurity http ) throws Exception {
http.csrf().disable();
// /userInfo page requires login as ROLE_USER or ROLE_ADMIN.
// If no login, it will redirect to /login page.
http.authorizeRequests().antMatchers(
"/userInfo")
.access("hasAnyRole('ROLE_USER', 'ROLE_ADMIN')");
// For ADMIN only.
http.authorizeRequests().antMatchers(
"/admin")
.access("hasRole('ROLE_ADMIN')");
// When the user has logged in as XX.
// But access a page that requires role YY,
// AccessDeniedException will be thrown.
http.authorizeRequests().and().exceptionHandling().accessDeniedPage("/403");
// Config for Login Form
http.authorizeRequests().and().formLogin()//
// Submit URL of login page.
.loginProcessingUrl("/j_spring_security_check") // Submit URL
.loginPage("/login")//
.defaultSuccessUrl("/userInfo")//
.failureUrl("/login?error=true")//
.usernameParameter("username")//
.passwordParameter("password")
//Config for Logout Page
.and().logout().logoutUrl("/logout").logoutSuccessUrl("/logoutSuccessful");
// The pages does not require login
http.authorizeRequests().antMatchers(
"/",
"/login",
"/css/**", //--> I also read that this should work on its own.. but of course, didn't work for me
"/register",
"/registerSuccessful",
"/index",
"/atlas").permitAll();
}
}
Мой класс WebConfiguration:
@Configuration
@EnableWebMvc
public class WebConfiguration implements WebMvcConfigurer {
@Bean
public MessageSource messageSource() {
ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();
// Load file: validation.properties
messageSource.setBasename("classpath:validation");
messageSource.setDefaultEncoding("UTF-8");
return messageSource;
}
@Override
public void addResourceHandlers( ResourceHandlerRegistry registry) {
// registry
// .addResourceHandler("/resources/**")
// .addResourceLocations("classpath:/static/");
//--> I tried that, but doesn't work
registry
.addResourceHandler("/webjars/**")
.addResourceLocations("/webjars/");
}
}
И мой очень простой файл atlas.css:
caption {
padding: 10px;
caption-side: top;
}
h3{
color: darkorange;
}
body {
padding-top: 10px;
background: red;
}
Итак, ребята, я надеюсь, вы будете снисходительны со мной, если увидитекакая-то огромная ошибка.Я действительно пытался решить это самостоятельно в Интернете, но никак не мог заставить его работать ...
СПАСИБО МНОГО, ребята!