1 课程计划
1、 常见权限控制方式
2、 基于shiro提供url拦截方式验证权限
3、 在realm中授权
4、 基于shiro提供注解方式验证权限
5、 总结验证权限方式(四种)
6、 用户注销
7、 基于treegrid实现菜单展示
2 常见的权限控制方式
2.1 url拦截实现权限控制
shiro基于过滤器实现的
2.2 注解方式实现权限控制
底层:代理技术
3 基于shiro的url拦截方式验权
/js/** = anon
/images/** = anon
/css/** = anon
/login.jsp = anon
/validatecode.jsp* = anon
/userAction_login.action = anon
/pages/base/standard.jsp =perms["standard_page"]
/pages/base/courier.jsp = roles["admin"]
/** =authc
访问:使用权限过滤器perms 拦截到用户请求后,而当前用户没有任何权限。
4 在realm中授权
通过url控制权限:当某个请求需要进行权限校验,角色校验时候,安全管理器会调用reaml中授权的方法;获取用户角色,以及权限。
/**
* @Description: 给用户进行授权
*/
protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {
System.out.println("给用户授权");
//获取当前用户
User user = (User) SecurityUtils.getSubject().getPrincipal();
//数据库结构 用户-角色:多对多 角色-权限:多对多 可以根据用户id查询用户权限
//TODO 给用户授权只能是硬编码 ,后期改为查询数据库
//创建简单授权信息(包含当前用户对应的权限,角色)
SimpleAuthorizationInfo info = new SimpleAuthorizationInfo();
//添加权限标识,注意这里不能添加空白权限
//跟过perms滤器中,要求权限标识一样
info.addStringPermission("courier_page");
info.addRole("admin");
return info;
}
1 基于shiro的注解方式验权
1.1 开启shiro注解支持
1.2 在Service中方法上使用shiro注解
验证当前用户是否有权限,当没有权限时候,shiro框架抛出异常;
解决:在Realm中给用户进行授权;给当前用户增加权限即可
1.3 使用struts2框架处理异常信息
2 总结权限控制方式
1、 url拦截:底层基于过滤器;在spring容器中配置过滤器链,配置项目中url对应拦截规则,注意:配置顺序
2、 注解方式:底层基于动态代理
a) 第一步开启shiro注解扫描注意:强制使用cglib方式;事务注解也要使用cglib方式
b) 第二步:在service层中方法上使用shrio注解
3、 Shiro页面标签控制
4、 代码级别
3 Shiro框架应用
1 基于shiro框架实现用户注销
1、 修改index.jsp页面退出时的请求地址
2、 在Action中提供logout方法
2 菜单的查询
项目部署后,菜单数据,通过sql脚本直接添加到数据库中。
菜单表自关联;
1.1 treeGrid展示菜单数据
Treegrid要求的数据格式
1、 页面:pages/system/menu.jsp
2、 创建菜单三层对象-完成注入–略
3、 问题一:由于要求返回json包含children 并且方式出现No-session
4、 解决:将子节点数据立即加载
5、 转json数据时候死循环
6、 问题:重复数据
Servie”: