Shiro 是一个强大的简单易用的Java安全框架,
主要用来更便捷的认证,授权,加密,会话管理。
Shiro 首要的和最重要的目标就是容易使用并且容易理解。
-----------------------------------------------------------------------------------------------
对于使用者而言 : 三大主体
Subject 主体,代表了当前用户 ShiroSecurityManager 安全管理器 Realm 域 --> Shiro从中获取安全数据<!--
--------------------------------------------------------------------
配置文件: 存储临时信息 shiro.ini文件: 存储数据,用户名,密码,角色,权限等 用户名= 密码,角色信息.... 可以有多个角色 角色 = 权限
--------------------------------------------------------------------
1/Maven构建Shiro 并进行初体验
<!-- https://mvnrepository.com/artifact/org.apache.shiro/shiro-core --> <dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-core</artifactId> <version>1.3.2</version> </dependency> <!-- https://mvnrepository.com/artifact/org.apache.shiro/shiro-web --> <dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-web</artifactId> <version>1.2.3</version> </dependency> <dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-spring</artifactId> <version>1.2.2</version> </dependency> <dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-ehcache</artifactId> <version>1.2.3</version> </dependency> <!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-core --> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-core</artifactId> <version>2.8.2</version> </dependency> <!-- 如果不导入此依赖,在使用slf4j的时候loadclass将失败 --> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-simple</artifactId> <version>1.7.25</version> </dependency>
public class HelloShiro { //测试javaSe环境 使用日志 //获取Logger实例 private static final Logger logger = LoggerFactory.getLogger(HelloShiro.class); public static void main(String[] args) { logger.info("在测试logger..."); /**** * 1->获取安全管理器 * 2->获取用户 * 3-> 用户登录验证 * 4->权限管理 * 5->角色管理 * 6-> session 用户登录到退出存储的数据 */ //1/获取安全管理器 Factory<SecurityManager> factory = new IniSecurityManagerFactory("classpath:shiro.ini"); SecurityManager securityManager = factory.getInstance(); //2/设置安全管理器 SecurityUtils.setSecurityManager(securityManager); //获取Subject对象,即将登录的用户 Subject nowuser = SecurityUtils.getSubject(); Session session = nowuser.getSession(); session.setAttribute("name","张三无敌"); String value = (String) session.getAttribute("name"); if (value!= null ) { logger.info("-----------> " + value ); } //>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> // 当前用户是否登录了? if (nowuser.isAuthenticated()==false) { //如果没有登录 指定用户名和密码 UsernamePasswordToken token = new UsernamePasswordToken("root","roott"); // 记住我. token.setRememberMe(true); try { nowuser.login(token); logger.info("用户名和密码正确,登陆成功!"); }catch (UnknownAccountException e){ logger.info("用户名不存在!"); }catch (IncorrectCredentialsException e){ logger.info("密码错误"); }catch (LockedAccountException e) { logger.info("用户已经锁死"); }catch (AuthenticationException e) { logger.info("认证异常"); } } //当前用户是否拥有某角色 if (nowuser.hasRole("admin")){ logger.info("拥有该角色!"); }else { logger.info("不拥有该角色!"); } //当前用户拥有某权限 if (nowuser.isPermitted("winnebago:drive:eagle5")){ logger.info("拥有这些权限!"); }else { logger.info("不拥有这些权限!"); } System.out.println(nowuser.isAuthenticated()); //退出登录 nowuser.logout(); //退出线程 // System.exit(0); System.out.println("===================================="); System.out.println(nowuser.isAuthenticated()); } }
Shiro初识,学习笔记
最新推荐文章于 2021-02-15 09:33:11 发布