Shiro Quickstart

来源:互联网 发布:进程调度算法代码 编辑:程序博客网 时间:2024/05/19 06:39

Quickstart.java

public class Quickstart {    private static final transient Logger log = LoggerFactory.getLogger(Quickstart.class);    public static void main(String[] args) {        Factory<SecurityManager> factory = new IniSecurityManagerFactory("classpath:shiro.ini");        SecurityManager securityManager = factory.getInstance();        SecurityUtils.setSecurityManager(securityManager);        // 获取当前的Subject        Subject currentUser = SecurityUtils.getSubject();        // 测试使用Session        // 获取Session        Session session = currentUser.getSession();        session.setAttribute("someKey", "aValue");        String value = (String) session.getAttribute("someKey");        if (value.equals("aValue")) {            log.info("---> Retrieved the correct value! [" + value + "]");        }        // 测试当前的用户是否已经被认证,即是否已经登陆        // 调用Subject的isAuthenticated        if (!currentUser.isAuthenticated()) {            // 把用户名和密码封装为UsernamePasswordToken 对象            UsernamePasswordToken token = new UsernamePasswordToken("lonestarr", "vespa");            token.setRememberMe(true);            try {                // 执行登陆                currentUser.login(token);            }             // 没有指定的账户,则Shiro会抛出 UnknownAccountException            catch (UnknownAccountException uae) {                log.info("----> There is no user with username of " + token.getPrincipal());                return;             }             // 账户存在,密码错误 ,则Shiro会抛出 IncorrectCredentialsException            catch (IncorrectCredentialsException ice) {                log.info("----> Password for account " + token.getPrincipal() + " was incorrect!");                return;             }             // 用户被锁定的异常            catch (LockedAccountException lae) {                log.info("The account for username " + token.getPrincipal() + " is locked.  " +                        "Please contact your administrator to unlock it.");            }            catch (AuthenticationException ae) {            }        }        log.info("----> User [" + currentUser.getPrincipal() + "] logged in successfully.");        // 是否有某一个角色        if (currentUser.hasRole("schwartz")) {            log.info("----> May the Schwartz be with you!");        } else {            log.info("----> Hello, mere mortal.");            return;         }        // 用户是否具备某一个行为 ,调用Subject的isPermitted方法        if (currentUser.isPermitted("lightsaber:weild")) {            log.info("----> You may use a lightsaber ring.  Use it wisely.");        } else {            log.info("Sorry, lightsaber rings are for schwartz masters only.");        }        if (currentUser.isPermitted("user:delete:zhangsan")) {            log.info("----> You are permitted to 'drive' the winnebago with license plate (id) 'eagle5'.  " +                    "Here are the keys - have fun!");        } else {            log.info("Sorry, you aren't allowed to drive the 'eagle5' winnebago!");        }        System.out.println("---->" + currentUser.isAuthenticated());        // 执行登出        currentUser.logout();        System.out.println("---->" + currentUser.isAuthenticated());        System.exit(0);    }}
0 0
原创粉丝点击