Spring Boot,Keycloak和Vaadin集成问题

问题描述:

我一直在玩弹簧靴,并成功地在不同的项目中使用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。

显然,在我的设置中,启动时系统会将用户注册为匿名,而不是尝试实际进行身份验证。

http.anonymous().disable(); 

添加上面的片段到安全配置防止这种情况的发生,并且系统正确地将用户重定向到KC登录。

一旦我得到了这个工作,我注意到我的观点也被打破了。这是由于影响所有bean的方法安全代理设置。 Vaadin需要实际的运行时间类而不是代理例如找到意见。

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

更改proxyTargetClasstrue确保子代理的创建避免与Vaadin任何冲突。

我将所有更改都推送到github项目。

+0

我想这可以通过某种方式对具有某种匿名访问视图的项目(如用户注册表单)进行调整。亲切的问候;-) –

+0

是的,如果你想这样做。我需要在默认情况下注册用户,然后才能访问应用程序。这可以改变为默认允许所有访问,然后对视图和方法进行更细粒度的访问控制。 – chvndb

我使用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