*1.定义Privilege类:name,url,parent,child,roles(和Role多对多关系)
*2.安装权限列表数据Installer:
*因为需要用到SessionFactory和事务管理,所以把Installer交给Spring管理
*获取ApplicationContext:通过new ClassPathXmlApplicationContext()来获得Spring容器。不能通过实现ApplicationContextAware/或 WebApplicationContextUtils.getWebApplicationContext(servletContext)来获得spring容器(会报错)
*获取Installer实例,再install():ac.getBean("installer")
*3.实现容器初始化监听器InitListener:用于监听Tomcat启动时,就把权限数据name和url取出来放到Application域里
*实现ServletContextListener:
*获取ApplicationContext: WebApplicationContextUtils.getWebApplicationContext(servletContext)或new ClassPathXmlApplicationContext()都可以获得Spring容器,推荐前者。
*获取PrivilegeService: ac.getBean("privilegeService"),注意不能通过注入获得PrivilegeService Bean
*获取topPrivilegeName和allPrivilegeUrls
*4.在岗位管理里添加设置权限的功能:用户拥有的权限等于它所拥有的岗位的所有权限相加
*5.在user类里提供hasPrivilegeByName()和hasPrivilegeByUrl()方法
*6.left页面根据权限显示菜单:
<s:if test="#session.user.hasPrivilegeByName()">
有权限就显示这个菜单
</s:if>
*7.右侧压面根据权限显示<s:action>标签:
*做法一:跟显示菜单一样,每个action都用<s:if../>判断一样
*做法二:改写AnchorTag类,加入doEndTag()方法:
if(user.hasPrivilegeByUrl(priUrl)){
return super.doEndTag(); //正常的生成并显示超链接标签,并继续执行页面中后面的代码
}else{
return EVAL_PAGE; //不生成和显示超链接标签,继续执行页面中后面的代码
}
*注意:在doEndTag方法里,可以通过pageContext来获得当前jsp页面,进而通过pageContext获得session域里的user对象。(因为在定义标签时已经通过setPageContext()方法把当前jsp页面注入进来了)
*8.根据权限拦截用户请求:(防止那些没有action标签但直接通过url访问的非法用户)
*如果user为空且请求的是登陆url,放行;如果user不为空,且该user具有请求的权限,放行;否则返回去权限的错误。
*如果是基础权限,放行.(指在权限列表没有安装数据的其他权限)
注:因为是笔记,写的比较抽象,有什么问题可以给我留言或发我邮箱ziysong@163.com~~~