Shiro初识,学习笔记

Shiro 是一个强大的简单易用的Java安全框架,

主要用来更便捷的认证,授权,加密,会话管理。

Shiro    首要的和最重要的目标就是容易使用并且容易理解。

-----------------------------------------------------------------------------------------------

对于使用者而言  : 三大主体

Subject    主体,代表了当前用户
ShiroSecurityManager	安全管理器
Realm	域 --> Shiro从中获取安全数据<!-- 

--------------------------------------------------------------------

    配置文件: 存储临时信息
    shiro.ini文件: 存储数据,用户名,密码,角色,权限等
    用户名= 密码,角色信息....		可以有多个角色
    角色 = 权限 

--------------------------------------------------------------------

1/Maven构建Shiro  并进行初体验  

        <!-- https://mvnrepository.com/artifact/org.apache.shiro/shiro-core -->
        <dependency>
            <groupId>org.apache.shiro</groupId>
            <artifactId>shiro-core</artifactId>
            <version>1.3.2</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.apache.shiro/shiro-web -->
        <dependency>
            <groupId>org.apache.shiro</groupId>
            <artifactId>shiro-web</artifactId>
            <version>1.2.3</version>
        </dependency>
        <dependency>
            <groupId>org.apache.shiro</groupId>
            <artifactId>shiro-spring</artifactId>
            <version>1.2.2</version>
        </dependency>

        <dependency>
            <groupId>org.apache.shiro</groupId>
            <artifactId>shiro-ehcache</artifactId>
            <version>1.2.3</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-core -->
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-core</artifactId>
            <version>2.8.2</version>
        </dependency>
        <!-- 如果不导入此依赖,在使用slf4j的时候loadclass将失败 -->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-simple</artifactId>
            <version>1.7.25</version>
        </dependency>




public class HelloShiro {
    //测试javaSe环境   使用日志
    //获取Logger实例
        private static final Logger logger = LoggerFactory.getLogger(HelloShiro.class);

    public static void main(String[] args) {
       logger.info("在测试logger...");
        /****
         * 1->获取安全管理器
         * 2->获取用户
         * 3-> 用户登录验证
         * 4->权限管理
         * 5->角色管理
         * 6-> session      用户登录到退出存储的数据
         */
        //1/获取安全管理器
        Factory<SecurityManager> factory = new IniSecurityManagerFactory("classpath:shiro.ini");
        SecurityManager securityManager = factory.getInstance();
        //2/设置安全管理器
        SecurityUtils.setSecurityManager(securityManager);
        //获取Subject对象,即将登录的用户
        Subject nowuser = SecurityUtils.getSubject();
        Session session = nowuser.getSession();
        session.setAttribute("name","张三无敌");
        String value = (String) session.getAttribute("name");
        if (value!= null ) {
            logger.info("-----------> " + value );
        }
        //>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
        //  当前用户是否登录了?
        if (nowuser.isAuthenticated()==false) {
            //如果没有登录    指定用户名和密码
            UsernamePasswordToken token = new UsernamePasswordToken("root","roott");
            // 记住我.
            token.setRememberMe(true);
            try {
                nowuser.login(token);
                logger.info("用户名和密码正确,登陆成功!");
            }catch (UnknownAccountException e){
                logger.info("用户名不存在!");
            }catch (IncorrectCredentialsException e){
                logger.info("密码错误");
            }catch (LockedAccountException e) {
                logger.info("用户已经锁死");
            }catch (AuthenticationException e) {
                logger.info("认证异常");
            }
        }

        //当前用户是否拥有某角色
        if (nowuser.hasRole("admin")){
         logger.info("拥有该角色!");
        }else {
            logger.info("不拥有该角色!");
        }
        //当前用户拥有某权限

        if (nowuser.isPermitted("winnebago:drive:eagle5")){
            logger.info("拥有这些权限!");
        }else {
            logger.info("不拥有这些权限!");
        }
        System.out.println(nowuser.isAuthenticated());
        //退出登录
        nowuser.logout();
        //退出线程
//        System.exit(0);
        System.out.println("====================================");
        System.out.println(nowuser.isAuthenticated());
    }

}








评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值