sppring mvc 整合shiro 基础1

添加依赖:

  <dependency>
            <groupId>org.apache.shiro</groupId>
            <artifactId>shiro-core</artifactId>
            <version>1.3.2</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/junit/junit -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.44</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>4.3.6.RELEASE</version>
        </dependency>

一:

resources下创建 shiro.ini 文件

[users]
zhangsan=123,admin, guest
lisi=456,guest
[roles]
admin=select, save, update, delete
guest=select, update
TestShrio.java
package com.qfedu.test;

import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.AuthenticationException;
import org.apache.shiro.authc.CredentialsException;
import org.apache.shiro.authc.UnknownAccountException;
import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.config.IniSecurityManagerFactory;
import org.apache.shiro.mgt.SecurityManager;
import org.apache.shiro.realm.jdbc.JdbcRealm;
import org.apache.shiro.subject.Subject;
import org.springframework.jdbc.datasource.DriverManagerDataSource;

import java.util.Arrays;
import java.util.List;
import java.util.Scanner;

public class TestShrio {
    DriverManagerDataSource d;
    JdbcRealm c;
    public static void main(String[] args){

        // 构建SecurityManager工厂,IniSecurityManagerFactory可以从ini文件中初始化SecurityManager环境
        IniSecurityManagerFactory factory = new IniSecurityManagerFactory();

        // 通过工厂创建SecurityManager
        SecurityManager manager = factory.getInstance();

        // 将SecurityManager设置到运行环境中
        SecurityUtils.setSecurityManager(manager);

        //创建一个Subject实例,该实例认证需要使用上面创建的SecurityManager
        Subject subject = SecurityUtils.getSubject();


        Scanner input = new Scanner(System.in);

        System.out.println("请输入用户名:");
        String username = input.next();
        System.out.println("请输入密码:");
        String password = input.next();

        //创建token令牌,账号和密码是ini文件中配置的
        UsernamePasswordToken token = new UsernamePasswordToken(username,password);

        try {
            //用户登录
           subject.login(token);
        }catch (UnknownAccountException e){
            System.out.println("未知账户");
            e.printStackTrace();
        }catch (CredentialsException e){
            System.out.println("密码错误");
            e.printStackTrace();
        } catch (AuthenticationException e){
            e.printStackTrace();
        }

        System.out.println(subject.hasRole("admin"));
        System.out.println(subject.hasRole("guest"));

        List<String> roles = Arrays.asList("admin","guest");
        System.out.println(Arrays.toString((subject.hasRoles(roles))));

        System.out.println("--------------------------------------");

        System.out.println(subject.isPermitted("select"));
        System.out.println(subject.isPermitted("save"));

    }

}

运行结果:

 

二:

shiro2.ini

[main]
ds=org.springframework.jdbc.datasource.DriverManagerDataSource
ds.url=jdbc:mysql://localhost:3306/rbac?useSSL=true&serverTimezone=UTC&characterEncoding=UTF-8
ds.username=root
ds.password=root
ds.driverClassName=com.mysql.jdbc.Driver

jdbcRealm=org.apache.shiro.realm.jdbc.JdbcRealm
jdbcRealm.dataSource=$ds
jdbcRealm.authenticationQuery=select password from user where username = ?

securityManager.realm=$jdbcRealm
TestJDBCRealm.java
package com.qfedu.test;

import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.config.IniSecurityManagerFactory;
import org.apache.shiro.mgt.SecurityManager;
import org.apache.shiro.subject.Subject;
import org.junit.Test;

public class TestJDBCRealm {
    @Test
    public void testJDBCRealm(){

        IniSecurityManagerFactory factory = new IniSecurityManagerFactory("classpath:shiro2.ini");

        SecurityManager manager = factory.getInstance();

        SecurityUtils.setSecurityManager(manager);

        Subject subject = SecurityUtils.getSubject();

        UsernamePasswordToken token = new UsernamePasswordToken("junjun","123456");

        subject.login(token);

        System.out.println("success");
    }
}

运行结果:

注意:

// 构建SecurityManager工厂,IniSecurityManagerFactory可以从ini文件中初始化SecurityManager环境
IniSecurityManagerFactory factory = new IniSecurityManagerFactory();//括号中可以不写ini文件的路径,但是要在resources下名为 shiro.ini 一样才可以哦!不然的话就要 这样写:
IniSecurityManagerFactory factory = new IniSecurityManagerFactory("classpath:shiro2.ini");

  拜拜~~~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值