权限拦截 (拦截器: 对请求进行区分)
1 实现的价值(作用)
用户未登录:访问没用登录的URL,拦截到以后 跳转回登录
用户未登录:访问登录的URL,直接放行到后续流程处理框架,进行后续的操作
用户登录: 访问拥有的权限 跳转页面并渲染
用户登录: 访问没有的权限 跳转到没有权限的错误页面
权限拦截的研发步骤
1 实现HandlerInterceptor接口 有一个PreHandle方法
获取Session中用户 在获取Request url
判定Session 和null 的关系
为空的情况没有登陆时 跳转到登陆页面
在大配置中如果访问的是登陆url 不做拦截 使用的是Exclude 属性。
不为空的情况 登陆后 分情况讨论放行
访问 hasUrl:放行并渲染
访问 hasNotURL : 拦截跳转到 NoPermission 页面
2 用户登陆以后 访问 hasNotURL : 拦截跳转到 NoPermission 页面
if(hasPrivilegeByurl(url入参)){
retuen true;
}
3 UserInfo中
Public boolean hasOrivilegeByUrl(url入参){
// get all Permission from listener‘s area
List<String>list =null; ---Conver End
if(!list.contains(url)){
return true;// 他不能拦截本身默认拥有的权限 ,这些权限并没有显示在DB中进行存储
}
//获取到CurrentLoginUserPrivilege集合
迭代判定 有 :retuen true;
}
4 配置监听器 全局的监听器 SerbletContextListener
在容器启动的时候 去给application 放入系统所有权限
5 web.xml 中 配置监听器
配置法则 :spring 的监听器一定配置在第一位。