2017-04-27 111 views
2

我一直在玩彈簧靴,併成功地在不同的項目中使用Keycloak和Vaadin。現在,我想將兩者結合起來,以避免必須使用Vaadin來實現我自己的安全性。我到目前爲止的結果可以在這裏找到:github projectSpring Boot,Keycloak和Vaadin集成問題

我從vaadin4spring給出的shared security example開始。然後,我添加了Keycloak配置,如keycloak-spring-security-adapterkeycloak-spring-boot-adapter所示。

我現在已經在讓兩個人一起工作的牆上。當一切都正常運行,我瀏覽到localhost:8080,我得到以下錯誤:

{"timestamp":...,"status":401,"error":"Unauthorized","message":"Unauthorized","path":"/"}

沒有重定向被觸發與Keycloak進行身份驗證。但是,如果我導航到任何其他未由Vaadin管理的網址,例如localhost:8080/login,重定向被觸發。

登錄成功後,我可以導航到localhost:8080而不出錯。但是,任何操作仍然受到限制,並且安全視圖仍然隱藏。

任何想法如何解決我的配置?我想這是由於Vaadin處理CORS。

回答

1

顯然,在我的設置中,啓動時系統會將用戶註冊爲匿名,而不是嘗試實際進行身份驗證。

http.anonymous().disable(); 

添加上面的片段到安全配置防止這種情況的發生,並且系統正確地將用戶重定向到KC登錄。

一旦我得到了這個工作,我注意到我的觀點也被打破了。這是由於影響所有bean的方法安全代理設置。 Vaadin需要實際的運行時間類而不是代理例如找到意見。

@EnableGlobalMethodSecurity(securedEnabled = true, prePostEnabled = true, proxyTargetClass = true) 

更改proxyTargetClasstrue確保子代理的創建避免與Vaadin任何衝突。

我將所有更改都推送到github項目。

+0

我想這可以通過某種方式對具有某種匿名訪問視圖的項目(如用戶註冊表單)進行調整。親切的問候;-) –

+0

是的,如果你想這樣做。我需要在默認情況下注冊用戶,然後才能訪問應用程序。這可以改變爲默認允許所有訪問,然後對視圖和方法進行更細粒度的訪問控制。 – chvndb

2

我使用Keycloak Spring Security Adapter,並且在保護UI服務的根路徑(「/」)時也遇到了一些問題。

我結束了配置Spring MVC,當用戶試圖訪問用戶界面中的根路徑發送重定向:

@Bean 
public WebMvcConfigurerAdapter forwardToEquipmentManager() { 
    return new WebMvcConfigurerAdapter() { 
     @Override 
     public void addViewControllers(ViewControllerRegistry registry) { 
      registry.addViewController("/").setViewName("redirect:/ui/home"); 
     } 
    }; 
} 

這樣詢問的根路徑時,瀏覽器被重定向到主路徑和它觸發適配器邏輯。它只是工作。

+1

'配置器',這樣一個可怕的名字。 – petey

+0

感謝您的意見,它讓我走上了正軌。身份驗證現在正常工作,請參閱我的答案 – chvndb