Как сделать так, чтобы на начальной целевой странице не было формы входа из Spring Security? - PullRequest
1 голос
/ 10 ноября 2019

В настоящее время я использую Spring-Security с пользовательской страницей входа. Всякий раз, когда я запускаю свое приложение, оно всегда сначала попадает на мою страницу входа в систему, а не в домашнюю страницу в состоянии отсутствия входа. Я хочу, чтобы моя начальная целевая страница была переведена в домашний HTML-код в состоянии отсутствия входа и показывать кнопку входа.

Это мой WebSecurityConfig.java

protected void configure(HttpSecurity http)throws Exception {
        http
            .authorizeRequests()
            .antMatchers("/css/**").permitAll()
            .antMatchers("/js/**").permitAll()
                .anyRequest().authenticated()
            .and()
            .formLogin()
            .loginPage("/login")
            .permitAll()
            .and()
            .logout().logoutRequestMatcher(new AntPathRequestMatcher("/logout")).logoutSuccessUrl("/login").permitAll();
    }

Это контроллер, который обрабатывает страницу входа и домашнюю страницу

@RequestMapping("/")
    public String home (){
        return "home";
    }

    @RequestMapping("/login")
    public String login(){
        return "login";
    }

Это мой login.html

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">

<head>
    <title>Home</title>

    <object th:include="fragments/fragment :: css" th:remove="tag"></object>
    <object th:include="fragments/fragment :: js" th:remove="tag"></object>

 </head>

<body>
        <div id="login">
            <h3 class="text-center text-white pt-5">Halo!</h3>
            <div class="container">
                <div id="login-row" class="row justify-content-center align-items-center">
                    <div id="login-column" class="col-md-6">
                        <div id="login-box" class="col-md-12">
                            <form id="login-form" class="form" th:action="@{/login}" method="POST">
                                <h3 class="text-center text-info">Login</h3>
                                <div class="form-group">
                                    <label for="username" class="text-info">Username:</label><br>
                                    <input type="text" name="username" id="username" class="form-control">
                                </div>
                                <div class="form-group">
                                    <label for="password" class="text-info">Password:</label><br>
                                    <input type="password" name="password" id="password" class="form-control">
                                </div>
                                <div class="form-group">
                                    <input type="submit" name="submit" class="btn btn-info btn-md" value="submit">
                                </div>
                            </form>
                        </div>
                    </div>
                </div>
            </div>
        </div>
    </body>
</html>

<style>
body {
  margin: 0;
  padding: 0;
  background-color: #9be3de;
  height: 100vh;
}
#login .container #login-row #login-column #login-box {
  margin-top: 120px;
  max-width: 600px;
  height: 320px;
  border: 1px solid #9C9C9C;
  background-color: #EAEAEA;
}
#login .container #login-row #login-column #login-box #login-form {
  padding: 20px;
}
#login .container #login-row #login-column #login-box #login-form #register-link {
  margin-top: -85px;
}
</style>

и это мой home.html

<!DOCTYPE html>

<html xmlns:th="http://thymeLeaf.org">
<!-- <html xmlns:sec="https://www.thymeleaf.org/thymeleaf-extras-springsecurity5" xmlns:th="https://www.thymeleaf.org"> -->

<head>
    <title> Home </title>

    <object th:include="fragments/fragment :: css" th:remove="tag"></object>
    <object th:include="fragments/fragment :: js" th:remove="tag"></object>
</head>

<body>
    <nav th:replace="fragments/fragment :: navbar"></nav>
    <img style="width: 100% ; background-size: cover;" th:src="@{/img/webconstruction.png}">
</body>
</html>

Я ожидаю, что при первом входе на сайт он попадет на мой home.html без состояния входа в систему и покажет имя входаКнопка вместо моего login.html. Как мне подойти к этой проблеме?

1 Ответ

1 голос
/ 10 ноября 2019

Вам необходимо разрешить анонимный доступ к вашей домашней странице, настроив шаблон "/" с permitAll

Примечание: Если URL-адрес успешного завершения входа в систему будет "/" (контекстный корень). Вам нужно переопределить URL-адрес успеха , в противном случае после входа в систему он снова будет перенаправлен на домашнюю страницу.
Просто для примера, если ваш экран входа в систему с учетной записью представляет собой панель мониторинга, настройте URL успеха на панель мониторинга, как показано в приведенном ниже коде.

protected void configure(HttpSecurity http)throws Exception {
        http
            .authorizeRequests()
            .antMatchers("/").permitAll() // This will be your home screen URL
            .antMatchers("/css/**").permitAll()
            .antMatchers("/js/**").permitAll()
            .anyRequest().authenticated()
            .and()
            .formLogin()
            .defaultSuccessUrl("/postloginscreen") //configure screen after login success
            .loginPage("/login")
            .permitAll()
            .and()
            .logout().logoutRequestMatcher(new AntPathRequestMatcher("/logout")).logoutSuccessUrl("/login").permitAll();
    }
...