shiro学习笔记
【shiro学习笔记(1)】shiro入门 shiro的第一个程序shiro Maven案例
【shiro学习笔记(2)】在shiro中自定义登录策略使用MD5加密算法
shiro的授权
1.授权的概念
授权是指对用户进行访问控制,即用户是否有权限访问某个资源。
例如:用户登录后,只有具有“管理员”角色的用户才能访问“后台管理”模块。
2.授权的实现方式
基于角色的访问控制
通过角色来控制用户的访问权限,即用户是否有权限访问某个资源。
例如:用户登录后,只有具有“管理员”角色的用户才能访问“后台管理”模块。
基于资源的访问控制
通过资源来控制用户的访问权限,即用户是否有权限访问某个资源。
例如:用户登录后,只有具有“/admin/**”资源的用户才能访问“后台管理”模块。
3.权限字符串:
权限字符串的规则是:资源标识符:操作:对象实例ID,可以使用*通配符
例:
用户角色具有创建用户的权限:user:create或者user:create: 星号
用户角色具有修改对象实例ID为1的用户的权限:user:update:1
4.shiro授权的实现
(1).在shiro的配置文件中配置授权的过滤器
例如:配置/admin/**资源需要“admin”角色才能访问
<property name="filterChainDefinitions">
<value>
/admin/** = roles[admin]
</value>
</property>
(2).在realm中实现授权的方法
例如:realm中实现doGetAuthorizationInfo方法
protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {
//获取当前登录的用户名
String currentUsername = (String)super.getAvailablePrincipal(principals);
//从数据库中获取当前登录用户的详细信息
User user = userService.getByUsername(currentUsername);
//为当前用户设置角色和权限
SimpleAuthorizationInfo simpleAuthorInfo = new SimpleAuthorizationInfo();
simpleAuthorInfo.addRole(user.getRole());
simpleAuthorInfo.addStringPermission(user.getPermission());
return simpleAuthorInfo;
}
(3).在controller中使用shiro的注解
例如:在controller中使用shiro的注解
@RequiresRoles("admin")
@RequestMapping("/admin")
public String admin() {
return "admin";
}