带有Wicket的Spring安全角色层次结构



我想在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;
}

,它工作正常,当我访问授权端点/hello只有ADMIN角色:

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

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

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

次问题:如果在类级别上不可能,那么在角色层次的基础上阻止Wicket渲染组件(例如BookmarkablePageLink)的干净方法是什么?

我没有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 api来计算enabled布尔值。

相关内容

  • 没有找到相关文章

最新更新