当前位置: 首页 > 知识库问答 >
问题:

不可能在Spring启动时使用Vaadin注销。为什么?

漆雕正奇
2023-03-14

对于Vaadin10和Vaadin12我得到了相同的结果。spring版本是2.1.2

@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=>浏览器不问密码!

共有1个答案

阎宝
2023-03-14

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

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

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

/login中,您应该提供一个带有

标记的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>

 类似资料:
  • 主类: 测试代码: servlet发送了一个200状态代码,但测试结果显示状态为404 看来MockMvc在spring boot不能用来测试servlet

  • 问题内容: 我有一个通用的抽象模板类。我以为如果创建特定于类型的生产者,则可以直接在通用类中注入一些DAO服务。但是我不能。 为什么?我该如何解决? 当我注入一个例如它完美地工作。但是没有泛型… 问题答案: 当您要求 容器知道您要一个类型为的bean 。如果存在这样的bean并且其类型信息已知,则容器可以满足注入。例如,类型信息保留在带注释的方法中 容器使用反射来检索该参数化的类型,并将其与请求的

  • 当我编写一些spring代码时,我使用了带有class和annotation-config的Spring4。我已经声明一个bean将接口实现为组件。我正在尝试制作另一个bean来依赖于它的接口时间。但它不起作用,因为spring抛出一个错误,在该名称中找不到bean。我想这可能是因为只靠和实体类的自动电线工作,但我不知道为什么它会这样设置?有人能解释为什么依赖注释不允许类型自动连接到接口吗? 简单

  • 问题内容: 答案可能很简单:如何在Spring Security中手动注销当前登录的用户: ? 问题答案: 在Servlet 3.0容器中,Spring注销功能与Servlet集成在一起,你只需在上调用。仍然需要编写有效的响应内容。 根据文档(Spring 3.2): HttpServletRequest.logout()方法可用于注销当前用户。 通常,这意味着将清除SecurityContext

  • 我需要在spring boot data rest api中启用全局CORS,以防止在从浏览器调用api时出现以下错误:http://localhost:8090/posts?user-id=1。请求的资源上没有“访问-控制-允许-来源”标头。因此,不允许访问源“http://localhost”。“ 我可以在a浏览器中键入url并接收该资源的正确get响应,但我不能从网页中的ajax调用中发出相

  • 我在集群的ubuntu节点上设置了一个kafka 0.11.0.0实例。直到几周前,一切都正常工作,今天我尝试启动它,在启动后出现以下错误: 我的服务器。特性: 我编辑了广告。侦听器,因为存在将请求重定向到代理的代理。无论如何,直到几周前一切都很好。。。 我开始Kafka的步骤: 有什么建议吗?谢谢你们