细颗粒权限控制
来源:互联网 发布:远程控制电脑软件 编辑:程序博客网 时间:2024/04/26 00:10
具体方法是在action中的访问方法上加上自定义注解,在拦截器中,根据用户角色是否具有自定义注解中指定的权限,来选择向用户呈现的内容。
注解类实现:
package com.hurricane.shop.util;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;/** * 自定义注解 *///被这个注解修饰的注解,利用反射,将其他的注解读取出来@Retention(RetentionPolicy.RUNTIME)public @interface AnnotationLimit {String mid(); //子模块模块名称String pid(); //父模块操作名称}
拦截器中判断的相关代码:
HttpServletRequest request = (HttpServletRequest) actioninvocation.getInvocationContext().get(StrutsStatics.HTTP_REQUEST);//获取请求的action对象Object action = actioninvocation.getAction();//获取请求的方法的名称String methodName = actioninvocation.getProxy().getMethod();//获取action中的方法的封装类(action中的方法没有参数)Method method = action.getClass().getMethod(methodName, null);String result = null; // Action的返回值 //在完成跳转Action之前完成细颗粒权限控制,控制Action的每个方法//检查注解,是否可以操作权限的URLboolean flag = isCheckLimit(request,method);if(flag){// 运行被拦截的Action,期间如果发生异常会被catch住 result = actioninvocation.invoke();}else{request.setAttribute("errorMsg", "对不起!您没有权限操作此功能!");return "errorMsg";}return result;
/**验证细颗粒权限控制*/public boolean isCheckLimit(HttpServletRequest request, Method method) {if(method==null){return false;}//获取当前的登陆用户ElecUser elecUser = (ElecUser)request.getSession().getAttribute("globle_user");if(elecUser==null){return false;}//获取当前登陆用户的角色(一个用户可以对应多个角色)Hashtable<String, String> ht = (Hashtable)request.getSession().getAttribute("globle_role");if(ht==null){return false;}//处理注解,判断方法上是否存在注解(注解的名称为:AnnotationLimit)/* * 例如: * @AnnotationLimit(mid="aa",pid="0") public String home(){ */boolean isAnnotationPresent= method.isAnnotationPresent(AnnotationLimit.class);//不存在注解(此时不能操作该方法)if(!isAnnotationPresent){return false;}//存在注解(调用注解)AnnotationLimit limit = method.getAnnotation(AnnotationLimit.class);//获取注解上的值String mid=limit.mid(); //权限子模块名称String pid=limit.pid(); //权限父操作名称/** * 如果登陆用户的角色id+注解上的@AnnotationLimit(mid="aa",pid="0") * * 在elec_role_popedom表中存在 flag=true,此时可以访问Action的方法; * * 在elec_role_popedom表中不存在 flag=false,此时不能访问Action的方法; */boolean flag=false;//拦截器中加载spring容器,从而获取Service类,使用Service类查询对应的用户信息WebApplicationContext wac = WebApplicationContextUtils.getWebApplicationContext(request.getSession().getServletContext());IElecRoleService elecRoleService = (IElecRoleService)wac.getBean(IElecRoleService.SERVICE_NAME);//查询elec_role_popedom表中的所有的数据,使用二级缓存,解决系统性能问题List<ElecRolePopedom> list = elecRoleService.findAllRolePopedomWithCache();if(list!=null&&list.size()>0){for(int i=0;i<list.size();i++){ElecRolePopedom elecRolePopedom = list.get(i);if(elecRolePopedom!=null){if(ht!=null && ht.size()>0){for(Iterator<Entry<String, String>> ite = ht.entrySet().iterator();ite.hasNext();){Entry<String, String> entry = ite.next();//获取角色IDString roleID = entry.getKey();if(roleID.equals(elecRolePopedom.getRoleID()) && mid.equals(elecRolePopedom.getMid()) && pid.equals(elecRolePopedom.getPid())){//flag=true:表示有权限操作该功能flag=true;break;}}}}}}return flag;}
阅读全文
0 0
- 细颗粒权限控制
- 细颗粒度权限控制
- 粗-细颗粒权限控制
- 粗颗粒度权限控制
- Struts2拦截器实现细颗粒权限控制
- SSH网上商城颗粒归仓【五.后端控制权限访问】
- oracle 细颗粒审计FGA
- 细颗粒度Singleton模式实现
- 细颗粒度Singleton模式实现
- 权限控制
- 权限控制
- 权限控制
- 权限控制
- 权限控制
- 权限控制
- 权限控制
- 权限控制
- 权限控制
- 登录注册
- 多用户留言系统0.7-验证码上
- 在个人电脑搭建服务器-wamp
- 135. Candy
- 剑指offer 替换空格
- 细颗粒权限控制
- 我的java学习之路---方法的重载和覆盖的区别
- 多用户留言系统0.8-验证码下
- 容联云通讯实现php的手机发送短信验证
- 第7周项目3--负数让正数出队
- 适用脚本方便快捷安装高版本的docker
- html实现搜狐邮箱登陆首页
- [洛谷P1902]刺杀大使
- Maven配置: UserSetting配置错误(配成global setting),导致项目tomcat:run运行报错:failed to compile