博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
权限框架 - shiro 自定义realm
阅读量:5946 次
发布时间:2019-06-19

本文共 2243 字,大约阅读时间需要 7 分钟。

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

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

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

1 [main]2 # your custom realm path3 fooRealm=com.lee.shiro.realm.FooRealm4 # DI such as spring DI5 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     @Override13     protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {14 15         // token是用户输入的相关信息16         // 从token中取出身份信息, 即用户的username17         String username = (String)token.getPrincipal();18 19         // 根据用户名username从数据库查询密码password20         // 如果查询不到返回null21         // String password = userService.queryPwdByUserName(username)22         23         // 假设数据库查询出来的密码为如下24         String password = "1234567";25 26         // 如果查询到返回认证信息AuthenticationInfo27         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
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...

 

转载于:https://www.cnblogs.com/leechenxiang/p/5575968.html

你可能感兴趣的文章
nginx实现rtmp,flv,mp4流媒体服务器
查看>>
46.tornado绑定域名或者子域名泛域名的处理
查看>>
Elasticsearch 2.2.0 节点发现详解
查看>>
Elasticsearch 2.2.0 插件篇:安装
查看>>
文本过滤--sed 1
查看>>
PHP CURL并发,多线程
查看>>
CentOS 6.5 PYPI本地源制作
查看>>
raspberry 更换阿里源
查看>>
ES 概念及动态索引结构和索引更新机制
查看>>
JavaWeb ---Filter、Servlet
查看>>
django定制自己的admin界面
查看>>
简单计划一下:
查看>>
nodejs 安装环境配置(windows)
查看>>
Eclipse 環境中的 NuttX 編譯和除錯
查看>>
INSTALLING LIGHTTPD on CentOS 6.2
查看>>
子类能否重写父类的静态方法
查看>>
JS正则表达式验证身份证号码
查看>>
wap网站获取访问者手机号PHP类文件
查看>>
技术之centos7安装docker
查看>>
教你如何用内容营销生成客户
查看>>