Spring Boot,Keycloak和Vaadin集成问题

时间:2017-04-27 08:35:07

标签: spring-boot vaadin keycloak vaadin4spring

我一直在玩弹簧靴,并成功地在不同的项目中分别使用Keycloak和Vaadin。现在,我想结合两者来避免使用Vaadin实现我自己的安全性。我到目前为止的结果可以在这里找到:github project

我是从vaadin4spring给出的shared security example开始的。然后我添加了keycloak-spring-security-adapterkeycloak-spring-boot-adapter给出的Keycloak配置。

我现在已经碰壁,让两者一起工作。当一切都正常运行并导航到localhost:8080时,我收到以下错误:

  

{ “时间戳”:..., “状态”:401, “错误”: “未授权”, “消息”: “未授权”, “路径”: “/”}

未触发重定向以使用Keycloak进行身份验证。但是,如果我导航到任何其他不由Vaadin管理的网址,例如localhost:8080/login,重定向被触发。

成功登录后,我可以导航到localhost:8080而不会出错。但是,任何操作都受到限制,安全视图仍然隐藏。

有关如何修复配置的任何想法?我认为这是由于Vaadin正在处理CORS。

2 个答案:

答案 0 :(得分:2)

我使用Keycloak Spring安全适配器,在保护UI服务的根路径(“/”)时遇到了一些问题。

当用户尝试访问UI中的根路径时,我最终配置Spring MVC以发送重定向:

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

这样,当询问根路径时,浏览器会重定向到主路径,并触发适配器逻辑。它只是有效。

答案 1 :(得分:1)

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

http.anonymous().disable();

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

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

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

proxyTargetClass更改为true可确保创建子类代理,避免与Vaadin发生任何冲突。

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