使用 Wicket 的 Spring 安全角色层次结构

问题描述 投票:0回答:1

我想利用 Apache Wicket 框架中 Spring Security 的角色层次结构功能。即授权访问各个网页。 Wicket 设置为从安全上下文中获取角色,因此我可以毫无问题地使用它:

@AuthorizeInstantiation({"ROLE_ADMIN", "ROLE_USER"})
public class HomePage extends BasePage

我已经设置了角色层次结构,使 ADMIN 高于 USER

@Bean
public RoleHierarchy roleHierarchy()
{
    RoleHierarchyImpl roleHierarchy = new RoleHierarchyImpl();
    roleHierarchy.setHierarchy("ROLE_ADMIN > ROLE_USER");
    return roleHierarchy;
}

当我仅使用 ADMIN 角色访问授权端点 /hello 时它工作正常:

http.authorizeRequests()
    .antMatchers("/hello").hasRole("USER")

理想情况下,我想做这样的事情:

// Caution: invalid code - for demonstration only
@AuthorizeInstantiation("hasRole('USER')")
public class HomePage extends BasePage

子问题: 如果在类级别不可能,那么防止 Wicket 呈现组件的干净方法是什么,例如BookmarkablePageLink,基于角色层次?

spring-boot spring-security wicket
1个回答
0
投票

我没有使用 Spring Security 角色层次结构的经验,但我觉得下面的方法很管用:

@AuthorizeInstantiation({"ROLE_USER"})
public class HomePage extends BasePage

即如果当前用户的角色是

USER
或更高,它将允许页面的实例化,即
ADMIN
也应该没问题。

wicket-auth-roles 项目不支持像

hasRole()
和类似的 Spring 细节。

关于你的第二个问题:你可以覆盖

Component#isEnabled()
(或者更好的
Component#onConfigure()
+调用
Component#setEnabled(boolean)
。你可以使用Spring Security APIs来计算
enabled
布尔值。

© www.soinside.com 2019 - 2024. All rights reserved.