Shiro (1. Shiro 整合 Mybatis) 学习笔记

下一篇 : 2. Shiro 认证和授权的底层源码分析

Shiro概述 + SpringBoot整合Shiro

1. 配置环境

  1. 导入相关依赖

    	<!--数据库连接-->
    	<dependency>
    		<groupId>mysql</groupId>
    		<artifactId>mysql-connector-java</artifactId>
    	</dependency>
    	<!--druid数据源-->
    	<dependency>
    		<groupId>com.alibaba</groupId>
    		<artifactId>druid</artifactId>
    		<version>1.1.21</version>
    	</dependency>
    	<!--日志-->
    	<dependency>
    		<groupId>log4j</groupId>
    		<artifactId>log4j</artifactId>
    		<version>1.2.17</version>
    	</dependency>
    	<!--Mybatis-->
    	<dependency>
    		<groupId>org.mybatis.spring.boot</groupId>
    		<artifactId>mybatis-spring-boot-starter</artifactId>
    		<version>2.1.3</version>
    	</dependency>
    	<!--lombok-->
    	<dependency>
    		<groupId>org.projectlombok</groupId>
    		<artifactId>lombok</artifactId>
    		<version>1.18.12</version>
    	</dependency>
    
  2. 编写配置文件 application.yml 中配置数据源

    spring:
      thymeleaf:
        cache: false
    
      datasource:
        username: root
        password: 123456
        #?serverTimezone=UTC解决时区的报错
        url: jdbc:mysql://localhost:3306/springboot?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8
        driver-class-name: com.mysql.cj.jdbc.Driver
        type: com.alibaba.druid.pool.DruidDataSource
    
        #Spring Boot 默认是不注入这些属性值的,需要自己绑定
        #druid 数据源专有配置
        initialSize: 5
        minIdle: 5
        maxActive: 20
        maxWait: 60000
        timeBetweenEvictionRunsMillis: 60000
        minEvictableIdleTimeMillis: 300000
        validationQuery: SELECT 1 FROM DUAL
        testWhileIdle: true
        testOnBorrow: false
        testOnReturn: false
        poolPreparedStatements: true
    
        #配置监控统计拦截的filters,stat:监控统计、log4j:日志记录、wall:防御sql注入
        #如果允许时报错  java.lang.ClassNotFoundException: org.apache.log4j.Priority
        #则导入 log4j 依赖即可,Maven 地址:https://mvnrepository.com/artifact/log4j/log4j
        filters: stat,wall,log4j
        maxPoolPreparedStatementPerConnectionSize: 20
        useGlobalDataSourceStat: true
        connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500
    
  3. 新建三个包
    com.demo.pojo
    com.demo.mapper
    resources.mapper

  4. application.yml 中配置 mybatis
    实体类包的别名
    Mapper 文件地址

    mybatis:
      mapper-locations: classpath:mapper/*.xml
      type-aliases-package: com.demo.pojo
    
  5. 编写实体类

    @Data
    @NoArgsConstructor
    @AllArgsConstructor
    public class User {
        private int id;
        private String name;
        private String pwd;
    }
    
  6. 编写 Mapper 接口

    @Mapper
    @Repository
    public interface UserMapper {
        @Select("select * from user")
        List<User> getAllUser();
    
         @Select("select * from user where name=#{name}")
    	User getUserByName( @Param("name") String name);
    
        @Insert("insert into user (id, name, pwd) values (#{id},#{name},#{pwd})")
        int addUser(User user);
    
        @Update("update user set name=#{name},pwd=#{pwd} where id=#{id}")
        int updateUser(User user);
    
        @Delete("delete from user where id=#{id}")
        int deleteUser( @Param("id")int id);
    }
    
  7. 编写 Mapper.xml
    基本操作都用注解做了,这里就放空

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE mapper
            PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
            "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    <mapper namespace="com.mapper.UserMapper">
    </mapper>
    
  8. 编写 Service

    public interface UserService {
        List<User> getAllUser();
        User getUserByName(String name);
        void addUser(User user);
        void updateUser(User user);
        void deleteUser(int id);
    }
    
  9. 编写实现类

    @Service
    public class UserServiceImpl implements UserService{
    
        @Autowired
        UserMapper userMapper;
    
        @Override
        public List<User> getAllUser() {
            return userMapper.getAllUser();
        }
    
        @Override
        public User getUserByName(String name) {
            return userMapper.getUserByName(name);
        }
    
        @Override
        public void addUser(User user) {
            int rows = userMapper.addUser(user);
            if (rows > 0){
                System.out.println("插入成功");
            }else {
                System.out.println("插入失败");
            }
        }
    
        @Override
        public void updateUser(User user) {
            int rows = userMapper.updateUser(user);
            if (rows > 0){
                System.out.println("修改成功");
            }else {
                System.out.println("修改失败");
            }
        }
    
        @Override
        public void deleteUser(int id) {
            int rows = userMapper.deleteUser(id);
            if (rows > 0){
                System.out.println("删除成功");
            }else {
                System.out.println("删除失败");
            }
        }
    }
    
  10. 测试

2. Shiro + Mybatis 结合使用

  1. 修改 UserRealm
    在这里插入图片描述
    修改后

    	//通过参数获取登录的控制器中生成的 令牌
        UsernamePasswordToken token = (UsernamePasswordToken) authenticationToken;
        // 用户名密码(暂时先自定义一个做测试)
        User user = userService.getUserByName(token.getUsername());
        if (user != null){
            //密码认证, Shiro 自己做,为了避免和密码的接触
            //最后返回一个 AuthenticationInfo 接口的实现类,这里选择 SimpleAuthenticationInfo
            // 三个参数:获取当前用户的认证 ; 密码 ; 认证名
            return new SimpleAuthenticationInfo("", user.getPwd(), "");
        }else {
            // return null 就抛出没有该用户的异常
            return null;
        }
    
  2. 使用数据库中的数据,测试

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yuan_404

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值