软件世界网 购物 网址 三丰软件 | 小说 美女秀 图库大全 游戏 笑话 | 下载 开发知识库 新闻 开发 图片素材
多播视频美女直播
↓电视,电影,美女直播,迅雷资源↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
移动开发 架构设计 编程语言 Web前端 互联网
开发杂谈 系统运维 研发管理 数据库 云计算 Android开发资料
  软件世界网 -> 编程语言 -> ShiroAnnotation保护实例 -> 正文阅读

[编程语言]ShiroAnnotation保护实例


之前介绍了Shiro的Web访问控制和缓存配置,其实Shiro和Spring一样可以使用Annotation来配置方法级别的安全,省去自己每次获取Subject去做权限验证,比如在修改用户密码的时候只能是用户本人,在修改用户用户帐号的状态(lock/unlock)只有管理员可以,这些操作都需要方法级别的安全保护。
如果要自己获取当前的登录User信息,可以通过Shiro的SecurityUtils来实现,然后对User的权限做判断:
private User getCurrentUser(){
        Subject currentUser = SecurityUtils.getSubject();
        return userManager.getUserByName((String) currentUser.getPrincipal());
    }

如果使用Annotation,这些东西都是由Shiro来帮你实现了,你只要在业务方法上面加上相应的权限管理,一般来说使用的是都是每个对象的读写的权限,如果简单系统,可以把User对应的Role当成权限管理对象。给个简单例子:
 @Override
    @RequiresRoles("ROLE_ADMIN")
    public Show save(Show show){
       if(null != show.getId()){
            //due to create/update time is not passed back from page
            Show oldShow = findById(show.getId());
            if(null == oldShow){
                return null;
            }
            List<String> oldFilelist = LYTZUtils.getFilePathFromContent(oldShow.getContent());
            if(LOG.isDebugEnabled()){
                LOG.debug("the old content contains " + oldFilelist.size() + " images in image server");
            }
            show = super.save(show);
            List<String> newFilelist = LYTZUtils.getFilePathFromContent(show.getContent());
            for(String filePath : oldFilelist){
                if(!newFilelist.contains(filePath) && fileService.isFileExists(filePath)){
                    if(LOG.isDebugEnabled()){
                        LOG.debug("unusedFile: " + filePath);
                    }
                    fileService.removeFile(filePath);
                }
            }

            return show;
        } else {
            return super.save(show);
        }
    }

Shiro提供的annotation包括了基本验证:@RequiresAuthentication,@RequiresUser,@RequiresGuest ,角色验证:@RequiresRoles(value={“ROLE_VIP”, “ROLE_USER”}, logical= Logical.AND) ,@RequiresPermissions (value={“read”, “write”}, logical= Logical.OR)
版权声明:本文为博主原创文章,未经博主允许不得转载。
......显示全文...
    点击查看全文


上一篇文章      下一篇文章      查看所有文章
2015-08-23 13:05:20  
编程语言 最新文章
Java面试题(1)
ReactiveX序列——RxSwift
C++STL之ACM相关知识大全
c++中vector向量几种情况的总结(向量指针,
SSH框架整合demo
JAX
UVA
curl备忘(1)
C#机房重构——万事开头难(二)
OJ刷题
360图书馆 软件开发资料 文字转语音 购物精选 软件下载 美食菜谱 新闻资讯 电影视频 小游戏 Chinese Culture 股票 租车
生肖星座 三丰软件 视频 开发 短信 中国文化 网文精选 搜图网 美图 阅读网 多播 租车 短信 看图 日历 万年历 2017年9日历
2017-9-24 16:47:59
多播视频美女直播
↓电视,电影,美女直播,迅雷资源↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  软件世界网 --