如何从DB获取层次结构角色

时间:2017-02-09 19:06:17

标签: java spring spring-mvc spring-security

我有一个使用security.xml文件配置的Spring MVC项目,在那里我的角色是这样的:

<beans:bean id="roleHierarchy"
    class="org.springframework.security.access.hierarchicalroles.RoleHierarchyImpl">
    <beans:property name="hierarchy">
        <beans:value>
            ROLE_ADMIN > ROLE_PRIVILEGED
            ROLE_PRIVILEGED > ROLE_USER
            ROLE_USER > ROLE_ANONYMOUS
        </beans:value>
    </beans:property>
</beans:bean>

并且效果很好,但现在我希望该层次结构来自我的数据库中的表(我使用MYSQL)

你能指出我正确的方向吗?我想保留xml文件中的所有安全性,并且能够从DataBase中获取角色,因为角色是使用图形界面动态创建的并存储在DB中

1 个答案:

答案 0 :(得分:0)

您需要自定义UserDetailsS​​ervice(请参阅here an example

您的用户详细信息服务从数据库加载角色,并将其存储为已登录用户的GrantedAuthority列表。

e.g。

@SuppressWarnings("deprecation")
@Override
public UserDetails loadUserByUsername(String username)
        throws UsernameNotFoundException, DataAccessException
{
    System.out.println("Getting access details from employee dao !!");

    // Ideally it should be fetched from database and populated instance of
    // #org.springframework.security.core.userdetails.User should be returned from this method
    UserDetails user = new User(username, "password", true, true, true, true, new GrantedAuthority[]{ new GrantedAuthorityImpl("ROLE_USER") });
    return user;
}

在示例中,您需要添加逻辑以检索用户并添加角色。