Shiro--初识Shiro
来源:互联网 发布:2017经济下行 知乎 编辑:程序博客网 时间:2024/06/11 01:58
1 Shiro简介
Shiro是一个强大而灵活的开源安全框架,它干净利落地处理身份认证,授权,企业会话管理和加密。
Authentication:有时也简称为“登录”,这是一个证明用户他们是谁的行为。
Authorization:访问控制的过程,也就是决定“谁”去访问“什么”。
Session Management:管理用户特定的会话,即使在非 Web 或 EJB 应用程序。
Cryptography:通过使用加密算法保持数据安全同时易于使用。
2 初识Shiro。
一个官方简单的例子。代码说明均在注释中,不在重复。
具体代码:
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 currentUser = SecurityUtils.getSubject(); // 此处的Session是Shiro中的。不是web中的。 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 + "]"); } // 判断当前用户是否通过认证 if (!currentUser.isAuthenticated()) { // 当前用户没通过认证,使用UsernamePasswordToken封装用户和密码 UsernamePasswordToken token = new UsernamePasswordToken( "lonestarr1", "vespa"); token.setRememberMe(true); try { // 执行认证操作,即登录,此处模拟的是遍历配置文件中各个组合。 currentUser.login(token); } catch (UnknownAccountException uae) { // token.getPrincipal()获取当前用户的用户名 log.info("There is no user with username of " + token.getPrincipal()); } catch (IncorrectCredentialsException ice) { log.info("Password for account " + token.getPrincipal() + " was incorrect!"); } 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."); } // 检测当前用户是否有指定操作的权限 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."); } // 检测某一类型的实例是否具有某一具体操作的权限 // goodguy = winnebago:drive:eagle5:表示当前用户可以对winnebago实体的eagle5实例做drive操作 if (currentUser.isPermitted("winnebago:drive:eagle5")) { 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!"); } // 退出 currentUser.logout(); }}
本文部分摘自官方法文档,详情请自行查阅官方文档。
阅读全文
0 0
- Shiro--初识Shiro
- 【shiro】shiro初识
- shiro初识
- 初识Shiro
- 初识Shiro
- 初识Shiro
- 【shiro】shiro学习笔记1-shiro初识
- 01-Shiro初识
- Shiro框架学习-初识
- Shiro初识HelloWorld
- 初识shiro(一)
- 【shiro】shiro 学习笔记4-初识shiro授权
- shiro
- shiro
- Shiro
- shiro
- shiro
- shiro
- 浅谈Android LRecyclerView
- 1879 继续畅通工程(最小生成树)
- 二分查找(java)
- 【重要】号外啦,演示系统发布啦
- ListView Android 教程
- Shiro--初识Shiro
- 阿里云ECS,WampServer无法访问外网
- easyui之draggable控件分析,待完善
- cxf和spring的整合出现的问题:javax.xml.ws.soap.SOAPFaultException: Cannot create a secure XMLInputFactory
- 209.m1-banner的自动切换
- python写算法题:leetcode: 7. Reverse Integer
- cxf和spring的整合出现的问题:cvc-complex-type.2.4.c: The matching wildcard is strict, but no declaration can b
- python写算法题:leetcode: 8. String to Integer (atoi)
- 成长就是从认识到自己的无知而开始的