我有一个使用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中答案 0 :(得分:0)
您需要自定义UserDetailsService(请参阅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;
}
在示例中,您需要添加逻辑以检索用户并添加角色。