我尝试将Spring Security
与Vaadin 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处的完整日志输出)。
我尝试添加ApplicationSecurity
重写方法"配置(HttpSecurity http)"基于我在网上找到的例子,但这给我带来了更多的错误,因为它根本没有带我到/登录页面。
答案 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的实例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();
}