2015-11-05 163 views
2

我使用基于https://vaadin.com/spring的SpringBoot的VAADIN。除了身份验证之外,事情都很好。我使用基于SpringBoot的SpringSecurity java配置工作正常,并且SecurityContextHolder.getContext().getAuthentication()在VaadinUI中为我返回当前用户。我的配置是相当这里简单明了:Vaadin + SpringBoot集成和SecurityContextHolder.getContext()为空

http.authorizeRequests() 
    .antMatchers("/*").authenticated().and().httpBasic() 

的问题是,SecurityContextHolder.getContext().getAuthentication()返回正确的值只对第一个请求时,会显示VaadinUI。然后,对于SecurityContextHolder.getContext()。getAuthentication(),任何后续的Vaadin请求(例如按钮单击)都会返回null。任何想法如何使其按预期工作?

+0

[AFAIK](http://docs.spring.io/spring-security/site/docs/current/reference/html/technical-overview.html#what-is-authentication-in-spring-security),除非你已经设置了[自动执行过滤器](http://docs.spring.io/spring-security/site/docs/current/reference/html/technical-overview.html#tech-intro-sec-context -persistence),你需要通过调用'SecurityContextHolder.getContext()。setAuthentication(...)' – Morfic

回答

0

这是因为Vaadin处理请求的方式。它不使用DispatcherServlet,您可能需要使用RequestContextListener(或RequestContextFilter)来启用请求和会话范围。

看一看discussion about a related topic here

+0

来存储认证信息。嗯,我找不到任何完整的示例如何去做。我需要访问SecurityContextHolder.getContext()。getAuthentication()或者我应该复制getAuthentication()对象并将其存储到初始的ApplicationUI对象中? –

+0

@eeq你给定的链接不起作用。 – zygimantus

0

确保扩展WebSecurityConfigurerAdapter的@Configuration类使用@EnableWebSecurity进行注释。