CSS отказывается загружаться с Springboot / Spring Security / Thymeleaf - PullRequest
0 голосов
/ 25 сентября 2018

Я уточняю, что я студент французского языка на первом курсе 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;
}

Итак, ребята, я надеюсь, вы будете снисходительны со мной, если увидитекакая-то огромная ошибка.Я действительно пытался решить это самостоятельно в Интернете, но никак не мог заставить его работать ...

СПАСИБО МНОГО, ребята!

1 Ответ

0 голосов
/ 26 сентября 2018

Вы можете переопределить addResourceHandlers метод WebMvcConfigurerAdapter как таковой

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/static/**").addResourceLocations("classpath:/static/");
    }

и ссылаться на atlas.css как:

<link rel="stylesheet" type="text/css" media="all" th:href="@{/static/css/atlas.css}"/>

, если ваш atlas.css нижеsrc/main/resources/static/css.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...