Shiro JDBCRealm的使用

本文介绍如何使用Apache Shiro框架实现基于数据库的角色和权限管理。包括创建必要的数据表、配置数据源、设置JDBCRealm,并演示了用户认证及权限检查的过程。

首先就是要简历三个表:
users表:至少有id,username,password字段
user_roles表:至少有id,username,role_name字段
roles_permissions表:至少有id,role_name,permission字段

然后就是要导入数据源和mysql依赖

 <dependencies>
        <dependency>
            <groupId>org.apache.shiro</groupId>
            <artifactId>shiro-core</artifactId>
            <version>1.4.0</version>
        </dependency>

        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.46</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/com.alibaba/druid -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.1.10</version>
        </dependency>

    </dependencies>

接下来就是配置JDBCRealm和使用了

public class JDBCRealmTest {

    private JdbcRealm jdbcRealm= new JdbcRealm();


    private DruidDataSource druidDataSource = new DruidDataSource();



    @Before
    public void  JDBCRealmSet(){
        druidDataSource.setUrl("jdbc:mysql://localhost:3306/test");
        druidDataSource.setUsername("root");
        druidDataSource.setPassword("root");
        druidDataSource.setDriverClassName("com.mysql.jdbc.Driver");
        jdbcRealm.setDataSource(druidDataSource);
        jdbcRealm.setPermissionsLookupEnabled(true);//为了查询权限表,要开启权限查询

    }


    @Test
    public void testAutheticateion(){
        //1. 构建SecurityManager环境
        DefaultSecurityManager defaultSecurityManager = new DefaultSecurityManager();

        defaultSecurityManager.setRealm(jdbcRealm); //因为最终式使用Realm来验证,所以要设置Realm

        //2. 主体提交认证
        SecurityUtils.setSecurityManager(defaultSecurityManager);//先设置认证环境
        Subject subject = SecurityUtils.getSubject();
        //下来就是登陆了,如果传入的用户名不正确,和Realm中的不匹配,那么久会异常
        UsernamePasswordToken token = new UsernamePasswordToken("mark","111");
        subject.login(token);
        System.out.println("是否登陆成功:"+ subject.isAuthenticated());//true

        //查看是否有角色
        System.out.println(subject.hasRole("user"));//true

        //查看是否有权限
        System.out.println(subject.isPermitted("user:select"));//true
        subject.checkPermission("user:select");

    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值