无法使用Vaadin在Spring Boot中注销。为什么?

时间:2019-01-23 10:07:46

标签: spring spring-boot spring-security vaadin

我创建一个简单的spring boot应用程序。当我在pom.xml中添加vaadin依赖项时。无法注销。该用户仍处于登录状态,不需要输入密码。

对于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依赖项添加到pom中之后

我得到关注结果

我呼叫localhost:xxx / =>浏览器询问用户名/密码

我呼叫localhost:xxx / logout =>浏览器不询问密码!

1 个答案:

答案 0 :(得分:1)

问题是您使用的是基本身份验证,实际上并不支持注销。在每个请求中,浏览器都会发送用户名/密码,因此用户在注销后立即重新登录。

解决此问题的一种方法是将身份验证更改为表单,并为页面提供一个表单,用户可以在其中提交登录凭据。

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

/login中,您应该提供一个带有<form>标记的html页面,该标记用于发布登录凭据,例如:

<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