org.credo.shiro.Quickstart.java Source code

Java tutorial

Introduction

Here is the source code for org.credo.shiro.Quickstart.java

Source

package org.credo.shiro;

import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.config.IniSecurityManagerFactory;
import org.apache.shiro.session.Session;
import org.apache.shiro.subject.Subject;
import org.apache.shiro.util.Factory;
import org.apache.shiro.mgt.SecurityManager;

;

/**
 * ???Shiro SecurityManager,realms?users?rolepermissions?INI?
 * 
 * @author Credo
 * 
 */
public class Quickstart {

    public static void main(String[] args) {
        // ?shiro SecurityManager .
        Factory<SecurityManager> factory = new IniSecurityManagerFactory("classpath:shiro.ini");

        // SecurityManager?ShiroSecurityManager
        SecurityManager securityManager = factory.getInstance();

        // ?????JVM?
        // ??????web?web.xml
        SecurityUtils.setSecurityManager(securityManager);

        // ---------------??shiro-----------------

        // ???
        Subject currentSubject = SecurityUtils.getSubject();

        // shiro session?,??webejb
        Session session = currentSubject.getSession();
        System.out.println("cuuerntUser:" + currentSubject.toString());
        session.setAttribute("someKey", "aValue");
        String value = (String) session.getAttribute("someKey");
        if (value.equals("aValue")) {
            System.out.println("??:" + value);
        }

        // ?,???
        // ??,???
        if (!currentSubject.isAuthenticated()) {
            // ???,?web??
            UsernamePasswordToken token = new UsernamePasswordToken("lonestarr", "vespa");
            // ???
            token.setRememberMe(true);
            currentSubject.login(token);
        }

        //shiro?subject.??
        System.out.println("User " + currentSubject.getPrincipal() + " Login Successful!");

        //???
        if (currentSubject.hasRole("schwartz")) {
            System.out.println("May the Schwartz be with you!");
        } else {
            System.out.println("Hello, mere mortal.");
        }

        //????? (not instance-level)
        if (currentSubject.isPermitted("lightsaber:weild")) {
            System.out.println("You may use a lightsaber ring.  Use it wisely.");
        } else {
            System.out.println("Sorry, lightsaber rings are for schwartz masters only.");
        }

        //a (very powerful) Instance Level permission:
        if (currentSubject.isPermitted("winnebago:drive:eagle5")) {
            System.out.println("You are permitted to 'drive' the winnebago with license plate (id) 'eagle5'.  "
                    + "Here are the keys - have fun!");
        } else {
            System.out.println("Sorry, you aren't allowed to drive the 'eagle5' winnebago!");
        }

        //all done - log out!
        currentSubject.logout();

        System.exit(0);
    }

}