您现在的位置是:首页 > 后台技术 > JavaJava
shiro学习(图文)
第十三双眼睛2021-01-07【Java】人已围观
简介Apache Shiro是一个强大且易用的Java安全框架,执行身份验证、授权、密码和会话管理。使用Shiro的易于理解的API,您可以快速、轻松地获得任何应用程序,从最小的移动应用程序到最大的网络和企业应用程序
shiro框架入门
1创建一个maven项目,加入如下依赖
2在项目中创建如下文件shiro.ini
3编写一个Java类
认证成功:
认证失败
使用jdbcRealm
在项目中创建如下配置文件
数据库的表名必须为users
而且数据库中的字段必须为userName和password
代码的话,改掉这一行即可
最终结果和上面一样
授权
编程式授权
基于角色的授权
如果登录主体有user角色,就会返回true,程序中可以根据true或者false做处理
判断登录主体是否有如下角色,返回结果是一个数组,数组中的结果和角色一一对应。
判断登录主体是否有指定的所有角色,如果有则返回ture,如果没有则返回false.
check方法,和上面不同的是,如果有某个角色,则不会报错,如果没有,则会报错。
和上面一样,判断登录主体是否有指定的角色,如果有,则正常向下执行,如果没有,则报错
基于权限的授权
如果有指定的权限,则返回true,如果没有则返回false.
返回一个数组,数组中的元素和权限列表中的元素一一对应
如果有指定的所有权限,则返回ture,如果没有,则返回false.
也有subject.checkXXX方法,和上面的一样。
1创建一个maven项目,加入如下依赖
<dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-core</artifactId> <version>1.2.4</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>1.7.12</version> </dependency> |
[users] zyb=123456 zyt=654321 |
public static void main(String[] args) { String path = "classpath:shiro.ini"; Factory<SecurityManager> factory = new IniSecurityManagerFactory(path); SecurityManager instance = factory.getInstance(); SecurityUtils.setSecurityManager(instance); Subject subject = SecurityUtils.getSubject(); UsernamePasswordToken token = new UsernamePasswordToken("zyb", "123456"); try{ subject.login(token); System.out.println("身份认证成功"); }catch(AuthenticationException e){ e.printStackTrace(); System.out.println("身份认证失败"); } subject.logout(); } |
认证失败
使用jdbcRealm
在项目中创建如下配置文件
[main] jdbcRealm=org.apache.shiro.realm.jdbc.JdbcRealm dataSource=com.alibaba.druid.pool.DruidDataSource dataSource.url=jdbc:mysql://localhost:3306/db_shiro dataSource.driverClassName=com.mysql.jdbc.Driver dataSource.username=root dataSource.password=123456 jdbcRealm.dataSource=$dataSource securityManager.realms=$jdbcRealm |
而且数据库中的字段必须为userName和password
代码的话,改掉这一行即可
String path = "classpath:jdbc_realm.ini"; |
授权
[users] #用户名对应的密码和角色 zyb=123456,admin zyt=654321,user [roles] #角色对应的权限 admin=select,insert,update,delete user=select |
编程式授权
基于角色的授权
subject.hasRole("user"); |
subject.hasRoles(list); |
subject.hasAllRoles(allRole); |
subject.checkRole("user"); |
subject.checkRoles(roles); |
基于权限的授权
boolean permitted = subject.isPermitted("add"); |
subject.isPermitted(permissions); |
subject.isPermittedAll(permissions); |
也有subject.checkXXX方法,和上面的一样。
Tags:
很赞哦! ()
上一篇:redis类型转换异常(图文)
相关文章
随机图文
-
微服务springcloud(图文)
微服务就是由一系列围绕自己业务开发的微小服务构成,他们独立部署运行在自己的进程里,基于分布式的管理 微服务是一种架构方式: 将单一应用基于业务拆分多个微小服务,他们独立运行 独立部署 每个服务运行在自己计算机进程里面 对于这些服务都是分布式管理。 这种架构是将单个的整体应用程序分割成更小的项目关联的独立的服务。一个服务通常实现一组独立的特性或功能,包含自己的业务逻辑和适配器。各个微服务之间的关联通过暴露api来实现(http)。这些独立的微服务不需要部署在同一个虚拟机,同一个系统和同一个应用服务器中 -
elasticsearch(图文)
elasticsearch -
Redis实现监听过期key(图文)
在订单业务中,有时候需要对订单设置有效期,有效期到了后如果还未支付,就需要修改订单状态。对于这种业务的实现,有多种不同的办法,比如: 1、使用Quartz,每次生成一个订单,就创建一个定时任务,到期后执行业务代码; 2、rabbitMq中的延迟队列; 3、对Redis的Key进行监控; -
HttpClient(图文)
HttpClient使用