【问题标题】:Integrate spring-boot-starter-security with Vaadin 7将 spring-boot-starter-security 与 Vaadin 7 集成
【发布时间】:2015-05-27 11:04:43
【问题描述】:

我正在尝试将 Spring SecurityVaadin Spring (https://vaadin.com/wiki/-/wiki/Main/Vaadin+Spring) 集成。

我的应用程序类刚刚启动了 Spring 应用程序

https://gist.github.com/anonymous/c047030c61b90c02d1ef

我创建了一个扩展 WebSecurityConfigurerAdapter 的类

https://gist.github.com/anonymous/0e905d0627adf5e2dc39

pom.xml 包含依赖spring-boot-starter-security

当我输入 localhost:8080 时,它会将我重定向到 Spring Security 提供的登录 url (http://localhost:8080/login)。我输入用户名/密码(用户/密码),我得到这个错误。

java.lang.NullPointerException: null at com.vaadin.server.LegacyCommunicationManager.getClientCache(LegacyCommunicationManager.java:194)

https://gist.github.com/anonymous/b4be702762b5bc744c66 的完整日志输出)。

我尝试根据我在网上找到的示例将覆盖方法“configuration(HttpSecurity http)”添加到ApplicationSecurity,但这给了我更多错误,因为这根本不会带我进入 /login 页面。

【问题讨论】:

标签: java spring-boot spring-security vaadin vaadin7


【解决方案1】:

我想这可能与 stated by Henri Sara 的当前 beta 版本中并非所有功能都支持这一事实有关:

Vaadin Spring 是一个官方插件(在 时刻,通过一些 API 更改),包括核心功能 Vaadin4Spring。

当前版本未涵盖的 Vaadin4Spring 部分 Vaadin Spring(事件总线,Spring Security 支持,...)将是 在测试版发布后的某个时间转换为使用 Vaadin Spring。更多的 功能可能会在未来版本中迁移到官方插件。

无论如何,出于对 Spring Security 的好奇(到目前为止还没有使用它),我对 Vaadin 7.4.3 做了一些研究。我在调试时设置了根记录器,添加了一些断点 (UIInitHandler:148) 并注意到以下内容:

  • UIInitHandler 正确处理了初始请求,并创建了相应 UI 的实例
  • /error 路径触发相同的断点@UIInitHandler:148 之后,处理程序无法解析 UI,因为很可能您没有定义。这也让我觉得可能会抛出异常但隐藏在其中的某个地方
  • 查看日志我看到了很多Invalid CSRF token found for http://localhost:8080/login?v-1429092013868

所以我将ApplicationSecurity.configure(HttpSecurity http) 方法稍微更改为http.csrf().disable().authorizeRequests().anyRequest().permitAll();,然后我就可以进入第二个屏幕了。现在,从我收集的信息来看,这可能不是那么安全,但它应该为您提供一个起点。

注意:您可能已经知道这一点,但如果您不知道,它可以为您节省一些时间,我也很高兴分享这一点,因为我花了一段时间才弄明白。根据您设置应用安全性的方式,您最终可能会将该方法更改为如下所示。

@Override
protected void configure(HttpSecurity http) throws Exception {
    http.csrf().disable().
            exceptionHandling().authenticationEntryPoint(new LoginUrlAuthenticationEntryPoint("/login")).accessDeniedPage("/accessDenied")
            .and().authorizeRequests()
            .antMatchers("/VAADIN/**", "/PUSH/**", "/UIDL/**","/login", "/login/**", "/error/**", "/accessDenied/**").permitAll()
            .antMatchers("/authorized", "/**").fullyAuthenticated();
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-06-25
    • 2016-01-29
    • 2013-05-20
    • 2019-11-19
    • 2016-03-11
    • 2014-05-22
    • 1970-01-01
    相关资源
    最近更新 更多