2015-11-05 161 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進行註釋。