权限框架 - 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-08-25 21:39:53

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

Java 权限框架 Shiro 实战二:与spring集成、filter机制

Shiro和Spring的集成,涉及到很多相关的配置,涉及到shiro的filer机制以及它拥有的各种默认filter,涉及到shiro的权限判断标签,权限注解,涉及到session管理等等方面. 1. 配置 首先需要在web.xml中专门负责接入shiro的filter: <!-- shiro 安全过滤器 --> <filter> <filter-name>shiroFilter</filter-name> <filter-class>org.

shiro自定义realm

我们知道shiro这个框架提供了信息认证和授权的功能性接口,但是shiro是不会帮我们维护数据的,shiro中的用户信息以及用户所对应的权限都是需要我们从数据库查询出来然后传给shiro相对应的接口,因此单单一个jdbcRealm已经无法满足我们的需求了,因为jdbcRealm是写死了的,里面查询的只能是users表.所以,为了满足我们的需求,我们必须自定义realm,从而才能不局限于一张表的数据查询,还能加自己的一些判断逻辑.下面讲讲怎么实现自定义realm. 自定义realm首先我们就要写一

shiro自定义realm支持MD5算法(六)

1.1     散列算法 通常需要对密码 进行散列,常用的有md5.sha, 对md5密码,如果知道散列后的值可以通过穷举算法,得到md5密码对应的明文. 建议对md5进行散列时加salt(盐),进行加密相当 于对原始密码+盐进行散列.(盐就相当于加入一个随机数) 正常使用时散列方法: 在程序中对原始密码+盐进行散列,将散列值存储到数据库中,并且还要将盐也要存储在数据库中. 如果进行密码对比时,使用相同 方法,将原始密码+盐进行散列,进行比对. 1.2 MD5测试 package cn.qlq.

shiro自定义realm(五)

上一节介绍了realm的作用: realm:需要根据token中的身份信息去查询数据库(入门程序使用ini配置文件),如果查到用户返回认证信息,如果查询不到返回null.token就相当于是对用户输入的用户名和密码的一个封装.下面就是创建一个用户名密码token: UsernamePasswordToken token = new UsernamePasswordToken("zhangsan", "111111"); Realm结构: 自定义realm packa

Shiro自定义Realm时用注解的方式注入父类的credentialsMatcher

用Shiro做登录权限控制时,密码加密是自定义的. 数据库的密码通过散列获取,如下,算法为:md5,盐为一个随机数字,散列迭代次数为3次,最终将salt与散列后的密码保存到数据库内,第二次登录时将登录的令牌再进行同样的运算后再与数据库的做对比. String algorithmName = "md5";String userName = "rose";String password = "rose123";int hashIterations =

Java 权限框架 Shiro 实战(一)

Apache Shiro 官网地址:http://shiro.apache.org/ Apache Shiro is a powerful and easy-to-use Java security framework that performs authentication, authorization, cryptography, and session management. With Shiro’s easy-to-understand API, you can quickly and

Shiro自定义realm实现密码验证及登录、密码加密注册、修改密码的验证

一:先从登录开始,直接看代码 @RequestMapping(value="dologin",method = {RequestMethod.GET, RequestMethod.POST},produces="text/html;charset=UTF-8") @ResponseBody public ResultJson systemUserdologin(XXX xxx,HttpServletRequest request,HttpServletRespons

权限框架 - 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

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

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