我一直在玩弹簧靴,并成功地在不同的项目中分别使用Keycloak和Vaadin。现在,我想结合两者来避免使用Vaadin实现我自己的安全性。我到目前为止的结果可以在这里找到:github project。
我是从vaadin4spring给出的shared security example开始的。然后我添加了keycloak-spring-security-adapter和keycloak-spring-boot-adapter给出的Keycloak配置。
我现在已经碰壁,让两者一起工作。当一切都正常运行并导航到localhost:8080
时,我收到以下错误:
{ “时间戳”:..., “状态”:401, “错误”: “未授权”, “消息”: “未授权”, “路径”: “/”}
未触发重定向以使用Keycloak进行身份验证。但是,如果我导航到任何其他不由Vaadin管理的网址,例如localhost:8080/login
,重定向被触发。
成功登录后,我可以导航到localhost:8080
而不会出错。但是,任何操作都受到限制,安全视图仍然隐藏。
有关如何修复配置的任何想法?我认为这是由于Vaadin正在处理CORS。
答案 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项目。