zoukankan      html  css  js  c++  java
  • 权限框架

    上篇文章中是使用的默认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...

  • 相关阅读:
    RTT startup.c 代码学习
    [RTT例程练习] 1.2 静态线程除初始化与脱离
    linux 下生成核心文件
    [RTT例程练习] 2.3 信号量检测按键(同步) (信号量互斥)
    [RTT例程练习] 1.6 线程优先级反转原理
    [RTT例程练习] 1.7 优先级翻转之优先级继承
    extern int Image$$RW_IRAM1$$ZI$$Limit
    [RTT例程练习] 1.1 动态线程创建,删除
    [RTT例程练习] 1.3 线程让出
    Linux操作系统下三种配置环境变量的方法
  • 原文地址:https://www.cnblogs.com/leechenxiang/p/5575968.html
Copyright © 2011-2022 走看看