JavaSE环境下Shiro认证过程以及API

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/huiting_liu/article/details/78570024

1.下载shiro所需要的jar包
(1)log4j-1.2.15.jar
(2)shiro-all-1.3.2.jar
(3)slf4j-api-1.6.1.jar
(4)slf4j-log4j12-1.6.1.jar
下载这些资源的同时,还可以到Apache官网上下载shiro的一些官方文件,可以点击下面的链接进入
http://shiro.apache.org/download.html
进入到该界面以后我们可以看到如下图显示的shiro不同版本的一些资源文件,我们这里需要下载的就是红色箭头所指的部分,1.3.2版本的shiro源码分布。
这里写图片描述
鉴于下载页面会多次跳转,将最终的下载地址粘贴如下:
http://www.apache.org/dyn/closer.cgi/shiro/1.3.2/shiro-root-1.3.2-source-release.zip
页面中有多个下载地址可供选择。

2.JavaSE环境下Shiro认证
(1)新建java project。
(2)导入Shiro所需要的jar包
(3)导入日志配置文件—-log4j.properties以及Shiro的配置文件—shiro.ini
这两个文件在哪呢,这就用到了第一步中下载的Shiro压缩包,具体路径:\shiro-root-1.3.2-source-release\shiro-root-1.3.2\samples\quickstart\src\main\resources

这里写图片描述
(4)编写主要的程序代码
shiro认证过程:
* 1.获取安全管理器
* 2.获取用户
* 3.用户登录验证
* 4.权限管理
* 5.角色管理
* 6.session:用户从登录到退出,作用域

public class HelloWorld {
// 获取日志Logger对象
private static final Logger log = LoggerFactory.getLogger(HelloWorld.class);

public static void main(String[] args) {
    log.info("我们正在测试log4j...");
    /*
     * 1.获取安全管理器
     * 2.获取用户
     * 3.用户登录验证
     * 4.权限管理
     * 5.角色管理
     * 6.session:用户从登录到退出,作用域
     */

    //1.获取安全管理器
    Factory<SecurityManager> factory=new IniSecurityManagerFactory("classpath:shiro.ini");
     SecurityManager  securityManager=factory.getInstance();//获得 SecurityManager实例

     //2.需要设置安全管理器
     SecurityUtils.setSecurityManager(securityManager);

     //3.获取subject对象,即将登陆的用户
     Subject  currentUser=SecurityUtils.getSubject();
     Session session= currentUser.getSession();

     session.setAttribute("name","Jerry");

     String value= (String) session.getAttribute("name");
     if(value !=null){
         log.info("shiro已经帮我们获得了session会话中对象指定的值:"+value);
     }
    //判断当前用户是否已验证
     if(currentUser.isAuthenticated()==false){
        UsernamePasswordToken token= new UsernamePasswordToken("lonestarr","vespa"); 
        token.setRememberMe(true);
        try{
            currentUser.login(token);
            log.info("用户名和密码正确,登陆成功。");
        }catch(UnknownAccountException exception ){
            log.info("账户不存在!");
        }catch(IncorrectCredentialsException exception)
        {
            log.info("密码错误!");
        }
        catch(LockedAccountException exception){
            log.info("用户已经锁死。");
        }catch(AuthenticationException exception){
            log.info("认证异常。");
        }

     }
     //判断用户是否有指定的角色---角色详见配置文档中 lonestarr
    if( currentUser.hasRole("goodguy")){
        log.info("拥有指定的角色");
    }else{
        log.info("不拥有指定的角色");
    }

    //判断用户是否拥有指定的权限

    if(currentUser.isPermitted(" winnebago:drive:eagle5")){
        log.info("拥有指定的权限");
    }else{
        log.info("当前用户没有指定的权限");
    }
    currentUser.logout();
    System.out.println("用户已退出");
}

}
大家需要注意的就是代码中用到的一些方法所代表的具体含义。

猜你喜欢

转载自blog.csdn.net/huiting_liu/article/details/78570024