权限框架 - shiro 自定义realm

上篇文章中是使用的默认realm来实现的简单登录,这仅仅只是个demo,真正项目中使用肯定是需要连接数据库的

首先创建自定义realm文件,如下:

在shiro中注入自定义realm的完全限定类名:

1 [main]
2 # your custom realm path
3 fooRealm=com.lee.shiro.realm.FooRealm
4 # DI such as spring DI
5 securityManager.realms=$fooRealm

自定义realm认证:

 1     /**
 2      *  设置realm的名称
 3      */
 4     @Override
 5     public void setName(String name) {
 6         super.setName("fooRealm");
 7     }
 8
 9     /**
10      * 认证
11      */
12     @Override
13     protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {
14
15         // token是用户输入的相关信息
16         // 从token中取出身份信息, 即用户的username
17         String username = (String)token.getPrincipal();
18
19         // 根据用户名username从数据库查询密码password
20         // 如果查询不到返回null
21         // String password = userService.queryPwdByUserName(username)
22
23         // 假设数据库查询出来的密码为如下
24         String password = "1234567";
25
26         // 如果查询到返回认证信息AuthenticationInfo
27         SimpleAuthenticationInfo simpleAuthenticationInfo = new SimpleAuthenticationInfo(username, password, this.getName());
28
29         return simpleAuthenticationInfo;
30     }

执行认证:

    /**
     *
     * @Description: 自定义realm
     *
     * @author leechenxiang
     * @date 2016年6月11日 下午9:07:27
     */
    @Test
    public void testFooRealm() {
        // 创建SecurityManager工厂,通过ini配置文件创建 SecurityManager工厂
        Factory<SecurityManager> factory = new IniSecurityManagerFactory("classpath:shiro/shiro-realm.ini");
        // 创建SecurityManager
        SecurityManager securityManager = factory.getInstance();
        // 设置SecurityManager到运行环境中,保持单例模式
        SecurityUtils.setSecurityManager(securityManager);
        // 从SecurityUtils里边创建一个subject
        Subject subject = SecurityUtils.getSubject();
        // 在认证提交前准备token(令牌)
        // 这里的账号和密码 将来是由用户输入进去
        UsernamePasswordToken token = new UsernamePasswordToken("lee", "123456");
        try {
            // 执行认证提交
            subject.login(token);
        } catch (AuthenticationException e) {
            e.printStackTrace();
        }
        // 是否认证通过
        boolean isAuthenticated = subject.isAuthenticated();
        System.out.println("是否认证通过:" + isAuthenticated);
    }

done...

 

时间: 2024-10-26 02:41:54

权限框架 - shiro 自定义realm的相关文章

shiro自定义Realm

1.1 自定义Realm 上边的程序使用的是shiro自带的IniRealm,IniRealm从ini配置文件中读取用户的信息,大部分情况下需要从系统的数据库中读取用户信息,所以需要自定义realm.分享牛系列,分享牛专栏,分享牛. 1.1.1 shiro提供的realm     最基础的是Realm接口,CachingRealm负责缓存处理,AuthenticationRealm负责认证,AuthorizingRealm负责授权,通常自定义的realm继承AuthorizingRealm. 1

权限框架 - shiro 简单入门实例

前面的帖子简单的介绍了基本的权限控制,可以说任何一个后台管理系统都是需要权限的 今天开始咱们来讲讲Shiro 首先引入基本的jar包 1 <!-- shiro --> 2 <dependency> 3 <groupId>org.apache.shiro</groupId> 4 <artifactId>shiro-core</artifactId> 5 </dependency> 6 <dependency> 7

权限框架 - shiro 授权demo

之前说了权限认证,其实也就是登录验证身份 这次来说说shiro的授权 shiro可以针对角色授权,或者访问资源授权 两者都行,但是在如今的复杂系统中,当然使用后者,如果你是小系统或者私活的话,前者即可,甚至可以不用,我懂的 好吧,上代码: 首先新建一个ini,登陆信息以及权限配置好 1 #用户 2 [users] 3 #eric 用户nathan的密码是123456,拥有boss以及hr两个权限 4 eric=123456,boss,hr 5 merry=123456,hr 6 7 #权限 8

java SSM 框架 微信自定义菜单 快递接口 SpringMVC mybatis redis shiro ehcache websocket

获取[下载地址]   QQ: 313596790A 调用摄像头拍照,自定义裁剪编辑头像,头像图片色度调节B 集成代码生成器 [正反双向](单表.主表.明细表.树形表,快速开发利器)+快速表单构建器 freemaker模版技术 ,0个代码不用写,生成完整的一个模块,带页面.建表sql脚本,处理类,service等完整模块C 集成阿里巴巴数据库连接池druid  数据库连接池  阿里巴巴的 druid.Druid在监控.可扩展性.稳定性和性能方面都有明显的优势D 集成安全权限框架shiro  Shi

Shiro Review——自定义Realm实现认证

一,自定义Realm   在之前,使用过下面的ini文件进行认证测试: #对用户信息进行配置 [users] #用户名跟密码 zhangsan=111111 lisi=111111   里面用户的认证信息是写死的,so,now ,来测试下使用自定义Realm来从我们的DB读取User信息,完成用户认证.   首先大致看下Realm的类层级关系:    比如,我们之前使用ini文件中的users配置用户名跟密码的时候,认证和时候使用的Realm就是IniRealm,比如里面的JdbcRealm,我

Shiro Review——自定义Realm实现授权

   在自定义Realm中,可以进对数据库的查询,将认证后的用户的资源权限全部查询出来. /** * 自定义Realm * @author LiuHuiChao * */ public class CustomRealm extends AuthorizingRealm{ @Override public void setName(String name) { super.setName("customName"); } /** * 认证方法 */ @Override protecte

安全框架shiro

1.1  简介 Apache Shiro是Java的一个安全框架,目前,使用Apache Shiro的人越来越多,因为它相当简单,对比Spring Security,可能没有Spring Security做的功能强大,但是在实际工作时可能并不需要那么复杂的东西,所以使用小而简单的Shiro就足够了.对于它俩到底哪个好,这个不必纠结,能更简单的解决项目问题就好了.本教程只介绍基本的Shiro使用,不会过多分析源码等,重在使用. Shiro可以非常容易的开发出足够好的应用,其不仅可以用在JavaSE

remembered-shiro权限框架中如何获取Remembered中的用户信息

问题描述 shiro权限框架中如何获取Remembered中的用户信息 如题,想做个自动登录功能,但是如何获取Remembered的用户信息如Subject.能不能说的详细一些,有代码说明就更好了

Django之路 如何开发通用且万能的的权限框架组件

业务场景分析 假设我们在开发一个培训机构的客户关系管理系统,系统分客户管理.学员管理.教学管理3个大模块,每个模块大体功能如下: 客户管理 销售人员可以录入客户信息,对客户进行跟踪,为客户办理报名手续 销售人员可以修改自己录入的客户信息 客户信息不能删除 销售主管可以查看销售报表 学员管理 学员可以在线报名 学员可以查看自己的报名合同.学习有效期 学员可以在线提交作业.查看自己的成绩 教学管理 管理员可以创建新课程.班级 讲师可以创建上课纪录 讲师可以在线点名.批作业 从上面的需求中,我们至少提