美文网首页
二、快速入门

二、快速入门

作者: 好像身体被掏空 | 来源:发表于2018-05-11 17:44 被阅读0次

    快速上手

    推荐查看官方sample下的例子
    创建测试项目,此处使用maven引入依赖
    pom.xml文件如下:

     <dependencies>
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>4.12</version>
            </dependency>
            <dependency>
                <groupId>org.apache.shiro</groupId>
                <artifactId>shiro-core</artifactId>
                <version>1.4.0</version>
            </dependency>
            <dependency>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-log4j12</artifactId>
                <version>1.7.21</version>
            </dependency>
        </dependencies>
    

    log4j.properties文件如下:

    log4j.rootLogger=INFO, stdout
    
    log4j.appender.stdout=org.apache.log4j.ConsoleAppender
    log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
    log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m %n
    
    # General Apache libraries
    log4j.logger.org.apache=WARN
    
    # Spring
    log4j.logger.org.springframework=WARN
    
    # Default Shiro logging
    log4j.logger.org.apache.shiro=TRACE
    
    # Disable verbose logging
    log4j.logger.org.apache.shiro.util.ThreadContext=WARN
    log4j.logger.org.apache.shiro.cache.ehcache.EhCache=WARN
    
    

    shiro.ini文件如下:

    [users]
    #提供了对用户/密码及其角色的配置,用户名=密码,角色1,角色2,...
    root = secret, admin
    guest = guest, guest
    presidentskroob = 12345, president
    darkhelmet = ludicrousspeed, darklord, schwartz
    lonestarr = vespa, goodguy, schwartz
    
    [roles]
    #提供了角色及权限之间关系的配置,角色=权限1,权限2,...
    admin = *
    schwartz = lightsaber:*
    goodguy = user:delete:test
    

    Quickstart.java内容如下:

    package com.demo.start;
    
    import org.apache.shiro.SecurityUtils;
    import org.apache.shiro.authc.*;
    import org.apache.shiro.mgt.DefaultSecurityManager;
    import org.apache.shiro.realm.text.IniRealm;
    import org.apache.shiro.session.Session;
    import org.apache.shiro.subject.Subject;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    
    public class Quickstart {
        public static final Logger log = LoggerFactory.getLogger(Quickstart.class);
    
        public static void main(String[] args) {
    
            IniRealm realm = new IniRealm("classpath:shiro.ini");
    
            //构建Security环境
            DefaultSecurityManager securityManager = new DefaultSecurityManager();
            securityManager.setRealm(realm);
            //获取当前的Subject
            SecurityUtils.setSecurityManager(securityManager);
            Subject subject = SecurityUtils.getSubject();
            //从主体中获取session,调用Subject#getSession()
            Session session = subject.getSession();
    
            session.setAttribute("test","demo");
            String value = (String) session.getAttribute("test");
            if (value.equals("demo")){
                log.info("retrieved the correct value ! [" + value + "]");
            }
    
            //测试当前的用户是否认证通过,调用Subject#isAuthenticated()
            if (!subject.isAuthenticated()) {
                //把用户名密码存入UsernamePasswordToken对象
                UsernamePasswordToken token = new UsernamePasswordToken("lonestarr","vespa");
                //设置rememberme
                token.setRememberMe(true);
                try {
                    //执行登录操作
                    subject.login(token);
                } catch (UnknownAccountException e) {
                    //若没有指定的账户
                    log.error("There is no user with username of " + token.getPrincipal());
                    return;
                } catch (IncorrectCredentialsException e) {
                    //错误的凭证异常;账户存在,但密码错误
                    log.error("Password for account " + token.getPrincipal() + " was incorrect!");
                    return;
                } catch (LockedAccountException e) {
                    //用户被锁定异常
                    log.error("The account for username " + token.getPrincipal() + " is locked.  " +
                            "Please contact your administrator to unlock it.");
                    return;
                } catch (AuthenticationException e) {
                    //所有认证异常的父类
                    log.error("authenticator failed");
                    return;
                }
            }
            log.info("User [" + subject.getPrincipal() + "] logged in successfully.");
    
            //测试是否拥有某一个角色,调用Subject#hasRole()
            if (subject.hasRole("schwartz")) {
                log.info("May the Schwartz be with you!");
            } else {
                log.info("Hello, mere mortal.");
            }
    
            //测试用户是否具备某一个行为,调用Subject#isPermitted()
            if (subject.isPermitted("lightsaber:wield")) {
                log.info("You may use a lightsaber ring.  Use it wisely.");
            } else {
                log.info("Sorry, lightsaber rings are for schwartz masters only.");
            }
    
            //测试用户是否具备某一个行为
            if (subject.isPermitted("user:delete:test")) {
                log.info("You are permitted to 'delete' the user with license plate (id) 'test'.  " +
                        "Here are the keys - have fun!");
            } else {
                log.info("Sorry, you aren't allowed to delete the 'test' user!");
            }
    
            log.info("---->"+ subject.isAuthenticated());
    
            //登出
            subject.logout();
    
            log.info("---->"+ subject.isAuthenticated());
    
    
    
        }
    }
    
    

    相关文章

      网友评论

          本文标题:二、快速入门

          本文链接:https://www.haomeiwen.com/subject/aybfdftx.html