角色-权限-用户开发总结
角色与权限的关系:多对多
一个角色可以有多个权限,一个权限可以被多个角色使用
特殊维护:权限是基本固定的所以并不需要一张表来存放我们用户一个常量类来定义权限这 个多的一方,建立角色与权限的关系
这时候我们只要维护角色表+中间表即可
用户与角色的关系:多对多
一个用户可以有多个角色,一个角色可以被多个用户使用
特殊维护:不能修改用户与角色的配置文档,建立用户与角色的多对多关系
在开发中有时候,我们不能通过修改Hibernate配置文档来建立关系的时候,我们可以手动为他们建立关系
1】创建UserRole对象-----》UserRole.hbm.xml------>user_role
2】当我们需要保存用户的时候便手动在user_role表中插入对应的多对多关系
系统的登录与注销:
当登录成功的时候,我们将用户的角色信息保存在登录的用户对象中,因为在权限识别的时候我们可以直接从session中获取角色对应的权限信息,就不必要反复查询数据库去获取。
登录成功:
将用户USER的信息保存在session中
将用户的角色信息保存在USER中
将用户登录记录到日志文件中
重定向跳转到首页
登录失败:
跳转到登录页面并且提示用户登录失败信息
退出(注销):
清除session中保存的信息
解决细节-登录页面嵌套
我们使用Frameset的框架的时候,当前用户的系统登录信息失效后;如果再点击左边的菜单,那么在右边的显示登录页面,而正确的应该是整个页面返回到登录页。
解决这个问题:应该在登录页面中使用js脚本判断,是否当前页面在框架内,即当前页面的窗口是否是顶级窗口,如果是子窗口的话;可以直接刷新父窗口的地址则会自动地整个页面跳转为登录页。
<script type="text/javascript">
if(window != window.parent){
window.parent.location.reload(true);
}
</script>
注意:session中保存的用户标识是固定的值所有我们应该将USER,定义在常量类Contact类中
注意:联合主键:①实现Serializable②重写 hashCode, equals方法