Как отладить страницу Spring Thymeleaf Spring security

#java #spring #security #thymeleaf

#java #spring #Безопасность #thymeleaf

Вопрос:

Я новичок в Thymeleaf, но раньше работал с JSP, так что это должен быть тот же принцип, о котором я думал.

Во всяком случае… Я пытаюсь собрать следующее руководство по безопасности Spring https://spring.io/guides/gs/securing-web /.

Он использует Thymeleaf для рендеринга страницы интерфейса, а следующая страница входа в систему не работает:

 <!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="https://www.thymeleaf.org"
      xmlns:sec="https://www.thymeleaf.org/thymeleaf-extras-springsecurity4">
<head>
    <title>Spring Security Example </title>
</head>
<body>
<div th:if="${param.error}">
    Invalid username and password.
</div>
<form th:action="@{/login.html}" method="post">
    <div><label> User Name : <input type="text" name="username"/> </label></div>
    <div><label> Password: <input type="password" name="password"/> </label></div>
    <div><input type="submit" value="Sign In"/></div>
</form>
</body>
</body>
</html>
  

Затем у меня есть следующий класс конфигурации Spring security:

 @Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .authorizeRequests()
            .antMatchers("/", "/home", "/greeting").permitAll()
            .anyRequest().authenticated()
            .and()
            .formLogin()
            .loginPage("/login")
            .defaultSuccessUrl("/homepage.html", true)
            .failureUrl("/login.html?error=true")
            .permitAll()
            .and()
            .logout()
            .permitAll();
}

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

Страница с формой отображается просто отлично, но когда я предоставляю указанные выше учетные данные (пользователь / пароль), пользователь не входит в систему. Он в основном застревает в цикле, требующем входа в систему; существует homepage.html , но он никогда не перенаправляется на.

В журналах ничего нет, никаких ошибок или каких-либо сообщений.

Пытаясь ее отладить, я добавил следующий контроллер:

 @Controller
@Slf4j
public class GreetingController {

    @PostMapping("/login")
    public String greeting(@RequestParam(name = "username", value = "xxx") String username, @RequestParam(name = "password", value = "yyy") String password, Model model) {
        log.info("U "   username   " P "   password);
        model.addAttribute("username", username);
        model.addAttribute("password", password);

        return "login";
    }
}
  

но при попытке вызвать http://localhost:8080/login я получаю следующую ошибку:

 There was an unexpected error (type=Method Not Allowed, status=405).
Request method 'GET' not supported
org.springframework.web.HttpRequestMethodNotSupportedException: Request method 'GET' not supported
  

Итак, попробовав все вышесказанное, я как бы застрял и не уверен, что попробовать дальше.

Как мне отладить такую страницу входа, чтобы узнать, что происходит? Кроме того, может ли кто-нибудь заметить какие-либо проблемы с кодом, который я предоставил выше до сих пор?

Комментарии:

1. Ваша форма должна публиковаться в /login not /login.html , и у вас не должен быть контроллер, поскольку вход в систему обрабатывается Spring Security, а не вашим контроллером.

2. Да, отлично, вы правы — /login работает, и мне не нужен контроллер.