Выход из Spring Boot с Vaadin невозможен. Зачем? - PullRequest
0 голосов
/ 23 января 2019

Я создаю простое приложение для весенней загрузки. Когда я добавляю зависимость vaadin в pom.xml. Выйти не возможно. Пользователь все еще входит в систему и не должен вводить пароль.

Я получаю одинаковый результат для Vaadin 10 и Vaadin 12. Весенняя версия - 2.1.2.RELEASE

@RestController
@EnableAutoConfiguration
@SpringBootApplication
public class TestApplication {  
    @RequestMapping("/")
    String home() {return "Hello World!";}
    public static void main(String[] args) {
        SpringApplication.run(TestApplication.class, args);
    }
}    

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
    @Override
    protected void configure(HttpSecurity http) throws Exception {
    http.httpBasic().and().
        .authorizeRequests().anyRequest().fullyAuthenticated();
    http.httpBasic().and().logout()
            .logoutRequestMatcher(new AntPathRequestMatcher("/logout")).logoutSuccessUrl("/")
    .invalidateHttpSession(true).deleteCookies("JSESSIONID");
    }
    @Autowired
    public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
         BCryptPasswordEncoder encoder = new BCryptPasswordEncoder();
         auth.inMemoryAuthentication().passwordEncoder(new BCryptPasswordEncoder()).withUser("thomas")
            .password(encoder.encode("xxx")).roles("USER");
      }
}

Dependeny:
<dependency>
     <groupId>com.vaadin</groupId>
 <artifactId>vaadin-spring-boot-starter</artifactId>
</dependency>

Я ожидаю следить за результатами

Я звоню localhost: xxx / => браузер спрашивает имя пользователя / пароль

Я звоню localhost: xxx / logout => браузер снова спрашивает имя пользователя / пароль

После того, как я добавлю зависимость vaadin в пом

Я получаю следующие результаты

Я звоню localhost: xxx / => браузер спрашивает имя пользователя / пароль

Я звоню localhost: xxx / logout => браузер не спрашивает пароль!

1 Ответ

0 голосов
/ 23 января 2019

Проблема в том, что вы используете обычную аутентификацию, которая на самом деле не поддерживает выход из системы.При каждом запросе браузер отправляет имя пользователя / пароль, поэтому пользователь снова входит в систему сразу после выхода из системы.

Один из способов решить эту проблему - изменить аутентификацию на форму и предоставить странице форму, в которой пользовательВы можете предоставить учетные данные для входа.

http.formLogin().loginPage("/login").permitAll()

в /login Вы должны предоставить html-страницу с тегом <form>, который отправляет учетные данные для входа, например:

<html>
<head></head>
<body>
   <h1>Login</h1>
   <form name='f' action="login" method='POST'>
      <table>
         <tr>
            <td>User:</td>
            <td><input type='text' name='username' value=''></td>
         </tr>
         <tr>
            <td>Password:</td>
            <td><input type='password' name='password' /></td>
         </tr>
         <tr>
            <td><input name="submit" type="submit" value="submit" /></td>
         </tr>
      </table>
  </form>
</body>
</html>

(Взято из https://www.baeldung.com/spring-security-login)

...