要实现登录权限管理,需要的数据有:用户、角色、权限,他们之间的关系都是多对多的,因此一共需要5张表:用户表,角色表,用户角色关联表,权限表,角色权限关联表。
有了这些数据后,只需要从数据库中拿到相应的信息,放入我们自定义的realm中设置即可。
首先,将shiro与spring进行集成:
shiro(一):springMVC与shiro整合,实现简单登录
接着,根据自己需要修改自定义realm即可
public class UserRealm extends AuthorizingRealm {
@Autowired
private UserDao userDao;
/**
* 授权
* @param principalCollection
* @return
*/
@Override
protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) {
String userName = (String) principalCollection.getPrimaryPrincipal();
//根据用户名拿到用户所拥有的角色
List<String> roles = userDao.getRoleByUsername(userName);
//将角色放入SimpleAuthorizationInfo
SimpleAuthorizationInfo info = new SimpleAuthorizationInfo();
info.addRoles(roles);
return info;
}
/**
* 登录
* @param authenticationToken
* @return
* @throws AuthenticationException
*/
@Override
protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken) throws AuthenticationException {
String username = (String) authenticationToken.getPrincipal();
//根据用户名获取用户
User user = userDao.getByUsername(username);
if (user == null) {
return null;
}
return new SimpleAuthenticationInfo(user.getUsername(),user.getPassword(),getName());
}
}
因为我的过滤链配的是/test = roles[],因此在授权时只需要加角色信息加入即可;如果需要具体的权限,那么就需要将权限加入,如:
//单个
info.addStringPermission("/test");
//全部
info.addStringPermissions(permissionsList);