Spring Boot、Keycloak 和 Vaadin 集成问题
Spring Boot, Keycloak and Vaadin integration issue
我一直在玩spring boot,并成功地在不同的项目中分别使用Keycloak 和Vaadin。现在,我想将两者结合起来,以避免必须使用 Vaadin 实现我自己的安全性。我到目前为止的结果可以在这里找到:github project.
我是从shared security example given by vaadin4spring. I then added the Keycloak configuration as given by the keycloak-spring-security-adapter and the keycloak-spring-boot-adapter开始的。
我现在在让两者一起工作时遇到了障碍。当一切正常并且 运行 并且我导航到 localhost:8080
时,我收到以下错误:
{"timestamp":...,"status":401,"error":"Unauthorized","message":"Unauthorized","path":"/"}
没有触发重定向来使用 Keycloak 进行身份验证。但是,如果我导航到任何其他不受 Vaadin 管理的 url,例如localhost:8080/login
,重定向被触发。
登录成功后,我可以无误地导航到localhost:8080
。但是,任何操作仍然受到限制,安全视图仍然隐藏。
关于如何修复我的配置有什么想法吗?我认为这是由于 Vaadin 处理 CORS。
我使用 Keycloak Spring 安全适配器,在保护 UI 服务的根路径(“/”)时也遇到了一些问题。
我最终将 Spring MVC 配置为在用户尝试访问 UI 中的根路径时发送重定向:
@Bean
public WebMvcConfigurerAdapter forwardToEquipmentManager() {
return new WebMvcConfigurerAdapter() {
@Override
public void addViewControllers(ViewControllerRegistry registry) {
registry.addViewController("/").setViewName("redirect:/ui/home");
}
};
}
这样浏览器在请求根路径时被重定向到主路径并触发适配器逻辑。它只是工作。
显然,在我的设置中,系统在启动时会将用户注册为匿名用户,而不是尝试实际进行身份验证。
http.anonymous().disable();
将上面的代码片段添加到安全配置中可以防止这种情况发生,系统可以正确地将用户重定向到 KC 登录。
一旦我开始工作,我发现我的观点也被打破了。这是由于影响所有 bean 的方法安全代理设置。 Vaadin 需要实际 运行 时间 类 而不是代理,例如查找视图。
@EnableGlobalMethodSecurity(securedEnabled = true, prePostEnabled = true, proxyTargetClass = true)
将 proxyTargetClass
更改为 true
可确保创建子类代理,避免与 Vaadin 发生任何冲突。
我将所有更改推送到 github 项目。
我一直在玩spring boot,并成功地在不同的项目中分别使用Keycloak 和Vaadin。现在,我想将两者结合起来,以避免必须使用 Vaadin 实现我自己的安全性。我到目前为止的结果可以在这里找到:github project.
我是从shared security example given by vaadin4spring. I then added the Keycloak configuration as given by the keycloak-spring-security-adapter and the keycloak-spring-boot-adapter开始的。
我现在在让两者一起工作时遇到了障碍。当一切正常并且 运行 并且我导航到 localhost:8080
时,我收到以下错误:
{"timestamp":...,"status":401,"error":"Unauthorized","message":"Unauthorized","path":"/"}
没有触发重定向来使用 Keycloak 进行身份验证。但是,如果我导航到任何其他不受 Vaadin 管理的 url,例如localhost:8080/login
,重定向被触发。
登录成功后,我可以无误地导航到localhost:8080
。但是,任何操作仍然受到限制,安全视图仍然隐藏。
关于如何修复我的配置有什么想法吗?我认为这是由于 Vaadin 处理 CORS。
我使用 Keycloak Spring 安全适配器,在保护 UI 服务的根路径(“/”)时也遇到了一些问题。
我最终将 Spring MVC 配置为在用户尝试访问 UI 中的根路径时发送重定向:
@Bean
public WebMvcConfigurerAdapter forwardToEquipmentManager() {
return new WebMvcConfigurerAdapter() {
@Override
public void addViewControllers(ViewControllerRegistry registry) {
registry.addViewController("/").setViewName("redirect:/ui/home");
}
};
}
这样浏览器在请求根路径时被重定向到主路径并触发适配器逻辑。它只是工作。
显然,在我的设置中,系统在启动时会将用户注册为匿名用户,而不是尝试实际进行身份验证。
http.anonymous().disable();
将上面的代码片段添加到安全配置中可以防止这种情况发生,系统可以正确地将用户重定向到 KC 登录。
一旦我开始工作,我发现我的观点也被打破了。这是由于影响所有 bean 的方法安全代理设置。 Vaadin 需要实际 运行 时间 类 而不是代理,例如查找视图。
@EnableGlobalMethodSecurity(securedEnabled = true, prePostEnabled = true, proxyTargetClass = true)
将 proxyTargetClass
更改为 true
可确保创建子类代理,避免与 Vaadin 发生任何冲突。
我将所有更改推送到 github 项目。