二、快速入门

2018-05-11  本文已影响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());



    }
}

上一篇下一篇

猜你喜欢

热点阅读