1.使用Filter完成一个简单的权限模型:
1)需求:
①.管理权限
> 查看某人的权限
> 修改某人的权限
②.对访问进行权限控制:有权限则可以访问,否则提示:没有对应的权限,请返回
2)实现:
②.对访问进行权限控制:
> 使用Filter进行权限的过滤:检验用户是否有权限,若有,则直接响应目标页面;若没有重定向到403.jsp
* 403.jsp
<h4>
没有对应的权限
请<a href="">返回</a>
</h4>
* 使用Filter如何进行过滤:
- 获取servletPath,类似于/app/article1.jsp
- 在用户已经登录(可使用 用户是否登录的过滤器)的情况下,获取用户信息,session.getAttribute("user")
- 在获取用户所具有的权限的信息:List<Authority>
- 检验用户是否有请求 servletPath的权限:可以思考除了遍历以外,有没有更好的实现方式
- 若有权限则:响应
- 若没有权限:重定向到403.jsp
* others:
- 用户若登录,需要把用户信息(User 对象)放入到HttpSession
- 再检验权限之前,需要判断用户是否已经登录
①.管理权限:
> 封装权限信息:Authority
Authority{
//显示到页面上的权限的名字
private String displayName;
//权限对应的URL地址:
private String url;一个权限对应着一个url,例如Article_1 -> /app_4/article1.jsp
}
> 封装用户信息:User
User{
private String username;
private List<Autority> authorities;
//...
}
> 创建一个UserDao:
User get(String username);
void update(String username,List<Autority>);
> 页面
authority-manager.jsp:
* 有一个text文本框,仅输入username,提交后,使用checkbox显示当前用户所有的权限的信息。
* 检查request中是否有user信息,若有,则显示
xxx的权限为:对应的权限的checkbox打上对号,提示,页面上需要通过两层循环的方式来筛选出被选择的权限
> Servlet
authority-manager.jsp 提交表单后:获取表单的请求参数:username,在根据username获取User信息,把user放入到request中,转发到authority-manager.jsp。
authority-manager.jsp 修改权限的表单提交后:获取请求参数:username,authory(多选);调用UserDao的update()方法实现权限的修改;重定向到authority-manager.jsp