2

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

我从vaadin4spring 给出的共享安全示例开始。然后我添加了keycloak-spring-security-adapterkeycloak-spring-boot-adapter给出的 Keycloak 配置。

我现在在让两者一起工作方面遇到了困难。当一切正常运行并导航到 时localhost:8080,我收到以下错误:

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

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

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

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

4

2 回答 2

3

我使用 Keycloak Spring Security Adapter 并且在保护 UI 服务的根路径(“/”)时也遇到了一些问题。

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

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

这样浏览器在请求根路径时被重定向到主路径并触发适配器逻辑。它只是工作。

于 2017-04-29T15:10:03.463 回答
1

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

http.anonymous().disable();

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

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

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

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

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

于 2017-05-02T14:27:34.297 回答