用session做权限控制
一个需要用户进行登录的网站,基本上都会设置用户权限,对不同的用户进行权限控制。例如:一个网站肯定会有一个管理员管理着普通的用户,普通的用户不可能对其他用户有着类似于增删改查等操作,这样网站都乱了……,一个网站做基本要做好逻辑结构,还要管理好所有用户的权限,不同种用户对应着不同的权限,让这些用户有一个层级的概念。
在网上搜索权限控制会接触到shiro,这个可以说是一个安全框架,用来做权限控制非常方便的,这个以后再看。做权限控制我最先想到的使用session来做,session对象,一个用户一次登录对应一个session,这样我们可以把用户的权限从数据库中查出来,保存在当前这个用户的session对象中,这样在打开每个网页的时候,首先判断当前用户权限是什么,属于什么等级,在页面上做出判断,哪些内容是可以显示给当前用户,哪些不可以显示,这样有些需要权限等级高的操作页面内容就可以选择显示给用户了。
在用户表中有一个字段用来记录着当前用户的权限(其实这里应该记录用户的权限列表,为什么?因为用户的权限总是有些交叉的,比如说设置一个普通用户对应的的权限可以进行的操作有修改登录密码,管理员对应的权限也可以对用户的密码进行修改,如果单一的设置普通用户的权限为1,管理员权限为5,我们在后台判断权限为5的用户可以修改密码,那普通用户的修改密码的操作就不能实现了,最好的方法就是每个用户对应一个权限列表,权限列表中对应着几种不同的权限编码,这样对于前面说的那种权限的交叉就可以很好的解决了)这里为了实现简单的用户权限控制,并没有采用权限列表这种方式,只是简单的设置某个权限为几(一个int类型的值)。
说了这么多,我们有一个用户表,表中记录着用户的基本信息,还有一个字段用来记录用户的权限标号(一个int类型的值存储),从1-5权限从小到大对应,一个登录页面,一个主页(登录成功跳转到主页),在用户输入用户名和密码的时候,会去数据库中查找有无此用户名和密码对应的用户,返回回来,我们在执行完这个操作的时候,再定义一个方法:在用户表中把当前登录用户的权限标号查出来,放到session中即可。
下面是一个ssm三个框架整合的项目,在mybatis的xml的配置文件中分别定义了登录查询的sql语句和查询权限的sql语句
在controller中写入逻辑代码,登录查询之后调用查询用户权限,这里的方法都是由spring注入的,确实很好用,通说现在都用spring全家桶了……
if中判断数据库查出来的是否有数据,也就是用户名密码是否正确,正确查出权限标号存入session,跳转到主页index页面,否则(用户名密码输入错误)返回login登录页面
在jsp页面中用jstl标签判断当前权限,选择显示页面中的信息,如果条件成立执行标签中的内容(显示内容),不成立不显示,就是判断用户权限标号是否是5
一个a用户,还有一个b用户,a用户权限是1,b用户权限是5,运行项目,登录
a用户不显示,b用户显示左面分类栏(不放图了,想想就可以了,项目放在github上还在写,)
也可以用model来存储这个权限标号,后期会改成model,这样代码会简单些。