[Решено] Springboot не будет загружать папки CSS после реализации веб-безопасности и настройки mvc - PullRequest
1 голос
/ 11 января 2020

Я пытался реализовать этот пример , но в моем случае у меня есть некоторые stati c css файлы, которые я должен включить.

Относительно проблемы css, которую я пытался добавив атрибут th:href="@{PATH} в html links, но у меня это не сработало.

Мое приложение на стороне безопасности работает почти так же, как в примере выше.

В моем проекте вместо перенаправления на hello.html меня перенаправляют на image url.

Это шаблоны html, в которых я использовал Thymeleaf:

  • login.html

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:th="https://www.thymeleaf.org"
    xmlns:sec="https://www.thymeleaf.org/thymeleaf-extras-springsecurity3">
<head>
<title>Speak Up</title>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<!--===============================================================================================-->
<link rel="icon" type="image/png"
    href="logincss/images/icons/favicon.png" />
<!--===============================================================================================-->
<link rel="stylesheet" type="text/css"
    href="logincss/vendor/bootstrap/css/bootstrap.min.css">
<!--===============================================================================================-->
<link rel="stylesheet" type="text/css"
    href="logincss/fonts/font-awesome-4.7.0/css/font-awesome.min.css">
<!--===============================================================================================-->
<link rel="stylesheet" type="text/css"
    href="logincss/fonts/iconic/css/material-design-iconic-font.min.css">
<!--===============================================================================================-->
<link rel="stylesheet" type="text/css"
    href="logincss/vendor/animate/animate.css">
<!--===============================================================================================-->
<link rel="stylesheet" type="text/css"
    href="logincss/vendor/css-hamburgers/hamburgers.min.css">
<!--===============================================================================================-->
<link rel="stylesheet" type="text/css"
    href="logincss/vendor/animsition/css/animsition.min.css">
<!--===============================================================================================-->
<link rel="stylesheet" type="text/css"
    href="logincss/vendor/select2/select2.min.css">
<!--===============================================================================================-->
<link rel="stylesheet" type="text/css"
    href="logincss/vendor/daterangepicker/daterangepicker.css">
<!--===============================================================================================-->
<link rel="stylesheet" type="text/css" href="logincss/css/util.css">
<link rel="stylesheet" type="text/css" href="logincss/css/main.css">

<!--===============================================================================================-->
</head>
<body>

    <div class="limiter">
        <div class="container-login100"
            style="background-image: url('logincss/images/bg-01.jpg');">
            <div class="wrap-login100">

                <form class="login100-form validate-form" action="#"
                    th:action="@{/login}" method="post">


                    <span class="login100-form-logo"> <img
                        src="logincss/images/icons/favicon.png" />
                    </span> <span class="login100-form-title p-b-34 p-t-27"> Log in </span>

                    <!-- This is from the Spring Security example-->
                    <div th:if="${param.error}">Invalid username and password.</div>
                    <div th:if="${param.logout}">You have been logged out.</div>

                    <div class="wrap-input100 validate-input"
                        data-validate="Enter username">
                        <input class="input100" type="text" name="username"
                            placeholder="Username"> <span class="focus-input100"
                            data-placeholder="&#xf207;"></span>
                    </div>

                    <div class="wrap-input100 validate-input"
                        data-validate="Enter password">
                        <input class="input100" type="password" name="password"
                            placeholder="Password"> <span class="focus-input100"
                            data-placeholder="&#xf191;"></span>
                    </div>



                    <div class="contact100-form-checkbox">
                        <input class="input-checkbox100" id="ckb1" type="checkbox"
                            name="remember-me"> <label class="label-checkbox100"
                            for="ckb1"> Remember me </label>
                    </div>

                    <div class="container-login100-form-btn">
                        <button class="login100-form-btn">Login</button>
                    </div>

                    <div class="text-center p-t-90">
                        <a class="txt1" href="#"> Forgot Password? </a> <br> <a
                            class="txt1" href="/register"> Don't have an account?
                            Register now! </a>
                    </div>
                </form>
            </div>
        </div>
    </div>


    <div id="dropDownSelect1"></div>

    <!--===============================================================================================-->
    <script src="logincss/vendor/jquery/jquery-3.2.1.min.js"></script>
    <!--===============================================================================================-->
    <script src="logincss/vendor/animsition/js/animsition.min.js"></script>
    <!--===============================================================================================-->
    <script src="logincss/vendor/bootstrap/js/popper.js"></script>
    <script src="logincss/vendor/bootstrap/js/bootstrap.min.js"></script>
    <!--===============================================================================================-->
    <script src="logincss/vendor/select2/select2.min.js"></script>
    <!--===============================================================================================-->
    <script src="logincss/vendor/daterangepicker/moment.min.js"></script>
    <script src="logincss/vendor/daterangepicker/daterangepicker.js"></script>
    <!--===============================================================================================-->
    <script src="logincss/vendor/countdowntime/countdowntime.js"></script>
    <!--===============================================================================================-->
    <script src="logincss/js/main.js"></script>

</body>
</html>
  • hello.html, в котором меня не перенаправляют (хотя аутентификация работает)

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="https://www.thymeleaf.org"
      xmlns:sec="https://www.thymeleaf.org/thymeleaf-extras-springsecurity3">
    <head>
        <title>Hello World!</title>
    </head>
    <body>
        <h1 th:inline="text">Hello [[${#httpServletRequest.remoteUser}]]!</h1>
        <form th:action="@{/logout}" method="post">
            <input type="submit" value="Sign Out"/>
        </form>
    </body>

  • home.html

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="https://www.thymeleaf.org" xmlns:sec="https://www.thymeleaf.org/thymeleaf-extras-springsecurity3">
    <head>
        <title>Spring Security Example</title>
    </head>
    <body>
        <h1>Welcome!</h1>

        <p>Click <a th:href="@{/hello}">here</a> to see a greeting.</p>
    </body>
</html>

  • Моя MVC Конфигурация:

@Configuration
public class MvcConfig implements WebMvcConfigurer {

    public void addViewControllers(ViewControllerRegistry registry) {
        registry.addViewController("/home").setViewName("home");
        registry.addViewController("/").setViewName("home");
        registry.addViewController("/hello").setViewName("hello");
        registry.addViewController("/login").setViewName("login");

    }

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

}

  • расширение моего класса WebSecurityConfigurerAdapter

@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .authorizeRequests()
                .antMatchers("/","/home").permitAll()
                .anyRequest().authenticated()
                .and()
            .formLogin()
                .loginPage("/login")
                .permitAll()
                .and()
            .logout()
                .permitAll();


    }

    @Bean
    @Override
    public UserDetailsService userDetailsService() {
        UserDetails user =
             User.withDefaultPasswordEncoder()
                .username("user")
                .password("password")
                .roles("USER")
                .build();

        return new InMemoryUserDetailsManager(user);
    }
}
  • Зависимости безопасности Spring:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-security</artifactId>
</dependency>

<dependency>
    <groupId>org.springframework.security</groupId>
    <artifactId>spring-security-test</artifactId>
    <scope>test</scope>
</dependency>

  • Зависимость Thymeleaf:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-thymeleaf</artifactId>
    <version>2.2.2.RELEASE</version>
</dependency>
  • Структура проекта:

enter image description here* 10 69 *

Только hello.html home.html и login.html используются для этого примера.

Выход

Это то, что login.html выглядит без логин css папка:

enter image description here

и при успешном входе я перенаправлен здесь (вместо hello.html):

enter image description here

Как правильно сослаться на stati c css и перенаправить пользователю hello.html?

Извините за длинный пост.

1 Ответ

1 голос
/ 11 января 2020

Вам необходимо разрешить доступ для входа в систему css и любых других каталогов stati c resources (js, images, et c) в конфигурации Spring Security. В вашем методе настройки добавьте .antMatchers("/logincss/**").permitAll().

Аналогичным образом добавьте antMatcher для "/ templates / **".

Справочная конфигурация в Spring Documentation для дополнительного чтения здесь .

Что касается перенаправления при успешном входе в систему в hello. html, вам необходимо добавить конфигурацию для defaultSuccessUrl("/hello.html"). Справочная документация здесь .

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