Spring security 如何使用vaadin14正确配置spring security以处理2个入口点-keyclaok和DB

Spring security 如何使用vaadin14正确配置spring security以处理2个入口点-keyclaok和DB,spring-security,vaadin,vaadin14,Spring Security,Vaadin,Vaadin14,我有一个vaadin14应用程序,我想在不同的url路径上启用不同类型的身份验证机制。一个是测试url,其中身份验证应使用DB,另一个是使用KeyClope的生产url 我能够让每个身份验证机制分别工作,但一旦我尝试将两者都放在一起,就会得到意想不到的结果 在这两种情况下,我都会获得登录页面,但身份验证无法正常工作。这是我的安全配置,我做错了什么 @配置 @启用Web安全性 公共类应用程序安全配置{ @配置 @订单(2) 公共静态类DBAuthConfigurationAdapter扩展了We

我有一个vaadin14应用程序,我想在不同的url路径上启用不同类型的身份验证机制。一个是测试url,其中身份验证应使用DB,另一个是使用KeyClope的生产url

我能够让每个身份验证机制分别工作,但一旦我尝试将两者都放在一起,就会得到意想不到的结果

在这两种情况下,我都会获得登录页面,但身份验证无法正常工作。这是我的安全配置,我做错了什么

@配置
@启用Web安全性
公共类应用程序安全配置{
@配置
@订单(2)
公共静态类DBAuthConfigurationAdapter扩展了WebSecurity配置适配器{
私有静态最终字符串LOGIN\u PROCESSING\u URL=“/LOGIN”;
私有静态最终字符串LOGIN\u FAILURE\u URL=“/LOGIN?error”;
私有静态最终字符串LOGIN_URL=“/LOGIN”;
私有静态最终字符串注销\u成功\u URL=“/login”;
/**
*需要登录才能访问内部页面并配置登录表单。
*/
@凌驾
受保护的无效配置(HttpSecurity http)引发异常{
//这里不使用springcsrf,以便能够在登录页面中使用普通HTML
http.csrf().disable()
//注册我们的CustomRequestCache,这样可以避免未经授权的访问尝试,所以
//用户在登录后被重定向。
.requestCache().requestCache(新的CustomRequestCache())
//限制对我们的应用程序的访问。
.and().antMatcher(“/test**”).authorizeRequests()
//允许所有流内部请求。
.requestMatchers(SecurityUtils::isFrameworkInternalRequest).permitAll()
//允许登录用户的所有请求。
.anyRequest().hasRole(“用户”)
//配置登录页面。
.and().formLogin().loginPage(登录URL).permitAll().loginProcessingUrl(登录URL)
.failureUrl(登录\u失败\u URL)
//配置注销
.and().logout().logoutSuccessUrl(logout\u SUCCESS\u URL);
}
@豆子
@凌驾
公共用户详细信息服务用户详细信息服务(){
属性用户=null;
试一试{
users=PropertiesLoaderUtils.loadAllProperties(“users.properties”);
返回新的InMemoryUserDetailsManager(用户);
}捕获(IOE异常){
e、 printStackTrace();
}
用户详细信息用户=
User.withUsername(“用户”)
.password(“{noop}password”)
.角色(“演员”)
.build();
返回新的InMemoryUserDetailsManager(用户);
}
/**
*允许访问静态资源,绕过Spring安全性。
*/
@凌驾
公共void配置(WebSecurity web){
web.igning().antMatchers(
//瓦丁流静态资源
“/VAADIN/**”,
//标准faviconuri
“/favicon.ico”,
//机器人排除标准
“/robots.txt”,
//web应用程序清单
“/manifest.webmanifest”,
“/sw.js”,
“/offline page.html”,
//图标和图像
“/icons/**”,
“/images/**”,
//(开发模式)静态资源
“/frontend/**”,
//(开发模式)webjars
“/webjars/**”,
//(开发模式)H2调试控制台
“/h2控制台/**”,
//(生产模式)静态资源
“/frontend-es5/**”和“/frontend-es6/**”,
“/resources/**”;
}
}
@订单(1)
@配置
@ComponentScan(basePackageClasses=keydeposecurityComponents.class)
公共静态类AppKeyDoppeSecurity扩展了KeyDopperWebSecurity配置适配器{
@自动连线
公共无效配置全局(
AuthenticationManagerBuilder身份验证)引发异常{
KeyDoppeAuthenticationProvider KeyDoppeAuthenticationProvider
=keydaperthenticationprovider();
KeyClope AuthenticationProvider.setGrantedAuthoritiesMapper(
新的SimpleAuthorityMapper());
auth.authenticationProvider(keydaperthenticationProvider);
}
@豆子
public keydeposeSpringBootConfigResolver keydeposeConfigResolver(){
返回新的keydepospringbootconfigResolver();
}
@凌驾
受保护的SessionAuthenticationStrategy SessionAuthenticationStrategy(){
返回新的RegisterSessionAuthenticationStrategy(
新的SessionRegistryImpl());
}
@凌驾
受保护的无效配置(HttpSecurity http)引发异常{
super.configure(http);
http.httpBasic().disable();
http.formLogin().disable();
http.anonymous().disable();
http.csrf().disable();
http.headers().frameOptions().disable();
http
.antMatcher(“/prod**”)
.授权请求()
.antMatchers(“/vaadinServlet/UIDL/**”).permitAll()
.antMatchers(“/vaadinServlet/HEARTBEAT/**”).permitAll()
.requestMatchers(SecurityUtils::isFrameworkInternalRequest).permitAll()
.anyRequest().hasRole(“参与者”);
http
.logout()
.addLogoutHandler(keydeposeLogoutHandler())
.logoutUrl(“/logout”).permitAll()
.logoutSuccessUrl(“/”);
http
.addFilterBefore(keydovepPreAuthionsFilter(),LogoutFilter.class);
http
.例外处理()
.authenticationEntryPoint(authenticationEntryPoint());
http
.会议管理()
.sessionAuthenticationStrategy(sessionAuthenticationStrategy());
}
}

}
在Vaadin UI中导航将更改浏览器中的URL,但不一定会创建针对该URL的浏览器请求,从而有效地绕过Spring security为该URL定义的访问控制。因此,Vaadin确实不适合Spring提供的基于请求URL的安全方法。仅就这个问题而言,您可以看看我专门创建的附加组件,以缩小Spring security和Va之间的差距