您现在的位置是:首页 > 后台技术 > JavaJava

shiro学习(图文)

第十三双眼睛2021-01-07【Java】人已围观

简介Apache Shiro是一个强大且易用的Java安全框架,执行身份验证、授权、密码和会话管理。使用Shiro的易于理解的API,您可以快速、轻松地获得任何应用程序,从最小的移动应用程序到最大的网络和企业应用程序

shiro框架入门
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>
2在项目中创建如下文件shiro.ini
[users]
zyb=123456
zyt=654321
3编写一个Java类
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
数据库的表名必须为users
而且数据库中的字段必须为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");
如果登录主体有user角色,就会返回true,程序中可以根据true或者false做处理
subject.hasRoles(list);
判断登录主体是否有如下角色,返回结果是一个数组,数组中的结果和角色一一对应。
subject.hasAllRoles(allRole);
判断登录主体是否有指定的所有角色,如果有则返回ture,如果没有则返回false.
subject.checkRole("user");
check方法,和上面不同的是,如果有某个角色,则不会报错,如果没有,则会报错。
subject.checkRoles(roles);
和上面一样,判断登录主体是否有指定的角色,如果有,则正常向下执行,如果没有,则报错
基于权限的授权
boolean permitted = subject.isPermitted("add");
如果有指定的权限,则返回true,如果没有则返回false.
subject.isPermitted(permissions);
返回一个数组,数组中的元素和权限列表中的元素一一对应
subject.isPermittedAll(permissions);
如果有指定的所有权限,则返回ture,如果没有,则返回false.
也有subject.checkXXX方法,和上面的一样。

 

Tags:

很赞哦! ()

文章评论

    共有条评论来说两句吧...

    用户名:

    验证码:

站点信息

  • 网站名称:JavaStudy
  • 建站时间:2019-1-14
  • 网站程序:帝国CMS7.5
  • 文章统计89篇文章
  • 标签管理标签云
  • 统计数据百度统计
  • 微信公众号:扫描二维码,关注我们