【问题标题】:Spring Boot, Keycloak and Vaadin integration issueSpring Boot、Keycloak 和 Vaadin 集成问题
【发布时间】:2017-05-02 22:27:34
【问题描述】:

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

我从vaadin4spring给出的shared security example开始。然后我添加了 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。

【问题讨论】:

    标签: spring-boot vaadin keycloak vaadin4spring


    【解决方案1】:

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

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

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

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

    【讨论】:

    • Configurer,好可怕的名字。
    • 感谢您的意见,它让我走上了正轨。身份验证现在可以正常工作,请参阅我的答案。
    【解决方案2】:

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

    http.anonymous().disable();
    

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

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

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

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

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

    【讨论】:

    • 我想这可以通过某种方式调整,以用于具有某种匿名访问视图(例如用户注册表单)的项目。亲切的问候;-)
    • 是的,如果你想要这个。默认情况下,我要求在访问应用程序之前注册用户。这可以更改为默认允许所有访问,然后对视图和方法进行更细粒度的访问控制。
    猜你喜欢
    • 2020-01-11
    • 1970-01-01
    • 2019-04-28
    • 1970-01-01
    • 2022-11-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-28
    • 2020-08-29
    相关资源
    最近更新 更多