将spring-boot-starter-security与Vaadin 7集成在一起

时间:2015-03-24 08:00:43

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

我尝试将Spring SecurityVaadin Springhttps://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处的完整日志输出)。

我尝试添加ApplicationSecurity重写方法"配置(HttpSecurity http)"基于我在网上找到的例子,但这给我带来了更多的错误,因为它根本没有带我到/登录页面。

1 个答案:

答案 0 :(得分:2)

我认为这可能与当前测试版不支持所有功能stated by Henry Sara这一事实有关:

  

Vaadin Spring是一个官方附加组件(从alpha到beta)   时刻,包括一些API更改),包括核心功能   Vaadin4Spring。

     

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

无论如何,出于对春季安全的好奇(到目前为止还没有使用它),我已经对Vadin 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();
}