我试图在Vaadin 23.3中使用RoleHierarchy
。
public class WebUISecurity extends VaadinWebSecurity {
// ...
protected void configure(HttpSecurity http) throws Exception {
RoleHierarchyImpl roleHierarchy = new RoleHierarchyImpl();
roleHierarchy.setHierarchy("ROLE_ADMIN > ROLE_USER");
DefaultWebSecurityExpressionHandler expressionHandler = new DefaultWebSecurityExpressionHandler();
expressionHandler.setRoleHierarchy(roleHierarchy);
http.authorizeRequests().expressionHandler(expressionHandler);
super.configure(http);
setLoginView(http, LoginView.class, "/ui/login");
}
// ...
}
但是RoleHierarchy
根本没有使用:当访问受限Vaadin视图时(@RolesAllowed("USER")
),不会命中getReachableGrantedAuthorities(...)
中的断点。
我做错了什么,或者在使用Vaadin时需要考虑什么?
1条答案
按热度按时间axr492tv1#
事实证明,使用表达式处理程序的方法没有意义,因为
@RoleAllowed
-annotations是使用ViewAccessChecker
检查的。由于这个类使用HttpServletRequest#isUserInRole(...)
来检查角色,因此一种方法是在相应的AuthenticationProvider
或LdapAuthoritiesPopulator
中使用RoleHierarchyAuthoritiesMapper
。见https://github.com/vaadin/flow/issues/16621#issuecomment-1514625986