gpt4 book ai didi

java - Spring 安全角色层次结构不适用于 Thymeleaf sec :authorize

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:10:52 24 4
gpt4 key购买 nike

我正在使用 Spring Security 3.2.5.RELEASE 和 ThymeLeaf 2.1.4.RELEASE。我已经在我的安全上下文中定义了角色层次结构。在我的 View 层中,我使用 sec:authorize 属性来定义菜单项。我希望看到顶级角色下的所有菜单项,但我只看到该角色下定义的菜单。我该如何解决这个问题,以便在顶层下看到所有菜单?

任何指针将不胜感激。谢谢。

<beans:bean id="roleVoter" class="org.springframework.security.access.vote.RoleHierarchyVoter">
<beans:constructor-arg ref="roleHierarchy"/>
</beans:bean>

<beans:bean id="roleHierarchy" class="org.springframework.security.access.hierarchicalroles.RoleHierarchyImpl">
<beans:property name="hierarchy">
<beans:value>
ROLE_ADMINISTRATOR > ROLE_MANAGER > ROLE_CONTENT_ADMINISTRATOR
</beans:value>
</beans:property>
</beans:bean>

在我的 View 页面中,我正在使用 sec:authorize 属性,如下所示:

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:th="http://www.thymeleaf.org"
xmlns:sec="http://www.thymeleaf.org/thymeleaf-extras-springsecurity3">
<body th:fragment="admin-menu" sec:authorize="hasRole('ROLE_ADMINISTRATOR')">
<li>
<a href="#"><i class="fa fa-users"></i> <span class="nav-label">Users</span> </a>
</li>
</body>
</html>

最佳答案

为了使角色层次结构在 thymeleaf 模板和通用安全(注释)配置中起作用,您只需要两件事:

  1. 制作 bean :

    @Bean
    public RoleHierarchyImpl roleHierarchy() {
    RoleHierarchyImpl roleHierarchy = new RoleHierarchyImpl();
    String hierarchy =
    "ADMIN_GLOBAL_MANAGEMENT > ADMIN_COMMON " +
    "ADMIN_GLOBAL_MANAGEMENT > ADMIN_USER_MANAGEMENT " +
    "ADMIN_GLOBAL_MANAGEMENT > ADMIN_PAYMENT_MANAGEMENT " +
    "ADMIN_GLOBAL_MANAGEMENT > ADMIN_MESSAGE_MANAGEMENT";
    roleHierarchy.setHierarchy(hierarchy);
    return roleHierarchy;
    }
  2. 扩展 WebSecurityConfigurerAdapter 并覆盖一个方法:

    @EnableWebSecurity
    public class SecurityConfig extends WebSecurityConfigurerAdapter {

    ...

    @Override
    public void configure(WebSecurity web) throws Exception {
    DefaultWebSecurityExpressionHandler expressionHandler = new
    DefaultWebSecurityExpressionHandler();
    expressionHandler.setRoleHierarchy(roleHierarchy());
    web.expressionHandler(expressionHandler);
    }

关于java - Spring 安全角色层次结构不适用于 Thymeleaf sec :authorize,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28609608/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com