• SpringBoot-32-shiro整合mybatis


    9.8 shiro整合mybatis

    • 在上一节springboot整合shiro工程的基础上导入整合数据库的依赖
    
            
                org.apache.shiro
                shiro-spring-boot-web-starter
                1.9.1
            
            
            
                org.springframework.boot
                spring-boot-starter-thymeleaf
            
            
            
                org.springframework.boot
                spring-boot-starter-web
            
            
            
                org.springframework.boot
                spring-boot-devtools
                runtime
                true
            
            
                org.projectlombok
                lombok
                true
            
            
                org.springframework.boot
                spring-boot-starter-test
                test
            
            
                org.apache.logging.log4j
                log4j-core
                2.17.2
            
    
    
        org.springframework.boot
        spring-boot-starter-data-jdbc
        2.7.2
    
    
        org.springframework.boot
        spring-boot-starter-jdbc
        2.7.2
    
    
        mysql
        mysql-connector-java
        8.0.29
    
    
        com.alibaba
        druid
        1.2.11
    
    
    
        org.mybatis.spring.boot
        mybatis-spring-boot-starter
        2.2.2
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65

    注意:父工程是普通maven项目中导入的依赖,在子项目springboot中无法沿用

    • 将之前整合mybatis的那一套直接搬过来(pojo/User,mapper/UserMapper,resource/mybatis/mapper/UserMapper.xml,),需要注意的是配置文件application.yml中配置项和UserMapper.xml路径的变动
    • 项目结构图,-本demo的静态资源可以访问SpringBoot整合shiro项目静态资源下载

    在这里插入图片描述

    • 整合好后可以先测试一下,没问题后进行下面步骤
    @SpringBootTest
    class ShiroSpringbootApplicationTests {
        @Autowired
        UserMapper userMapper;
        @Test
        void contextLoads() {
            Map map = new HashMap(15);
            map.put("id","20");
            User user = userMapper.getUser(map);
            System.out.println(user.toString());
        }
    
    }
    //User(id=20, name=李云, password=123456, email=123456@qq.com, birthday=Wed Aug 03 00:00:00 CST 2022)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 然后需要改变自定义UserRealm类中的授权方法,将其改为从数据库查询后的结果
    package com.example.config;
    
    import com.example.mapper.UserMapper;
    import com.example.pojo.User;
    import org.apache.shiro.authc.*;
    import org.apache.shiro.authz.AuthorizationInfo;
    import org.apache.shiro.realm.AuthorizingRealm;
    import org.apache.shiro.subject.PrincipalCollection;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.util.StringUtils;
    
    import java.util.HashMap;
    import java.util.Map;
    
    /**
     * @author CNCLUKZK
     * @create 2022/8/5-19:45
     */
    //自定义UserRealm extends AuthorizingRealm
    public class UserRealm extends AuthorizingRealm {
        @Autowired
        UserMapper userMapper;
        //授权
        @Override
        protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) {
            System.out.println("执行了授权doGetAuthorizationInfo方法!");
            return null;
        }
    
       //认证
        @Override
        protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {
            System.out.println("执行了认证doGetAuthenticationInfo方法!");
            //连接真实数据库
            UsernamePasswordToken userToken = (UsernamePasswordToken) token;
            Map map = new HashMap(15);
    
            /*(String)userToken.getPrincipal() == userToken.getUsername()*/
            map.put("name",userToken.getUsername());
            User user = userMapper.getUser(map);
    
            if (user==null) {
                return null; //抛出UnknownAccountException异常
            }
            /*可以加密:
            MD5加密:e10adc3949ba59abbe56e057f20f883e
            MD5盐值加密(密码混合账户): e10adc3949ba59abbe56e057f20f883eusername*/
            //密码认证,shiro做,加密了,默认是简单验证new SimpleCredentialsMatcher()明文验证
            return new SimpleAuthenticationInfo("",user.getPassword(),"");
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51

    连接真实数据库后登陆时,如果账号是重名,那么生成token失败登陆失败

    • 设置默认的密码加密规则在ShiroConfiguration配置类的第一步,注册自定义UserRealm指定密码验证规则

    密码认证,shiro做,加密了,默认是简单验证new SimpleCredentialsMatcher()的明文验证

    //第一步:创建Realm对象,需要自定义类
    @Bean
    public UserRealm userRealm(){
        UserRealm userRealm = new UserRealm();
        userRealm.setCredentialsMatcher(new Md5CredentialsMatcher());
        return userRealm;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 测试访问http://127.0.0.1:8080/点击登录,输入错误的密码admin/123
      在这里插入图片描述

    在这里插入图片描述

    • 输入正确密码后转到首页

    下一篇:SpringBoot-33-shiro请求授权的实现

  • 相关阅读:
    如何将数据输入神经网络,神经网络的数据预处理
    poi3.10 excel xls 设置列宽行高背景色加粗
    基于JAVA中山学院教室管理系统计算机毕业设计源码+系统+数据库+lw文档+部署
    房屋租赁app
    侯捷课程笔记(一)(传统c++语法,类内容)
    dp练习题
    匿名插槽,具名插槽,作用域插槽
    【目标搜索】基于matlab运动编码粒子群算法优化 (MPSO) 无人机搜索丢失目标【含Matlab源码 2254期】
    IDEA找不到Maven窗口
    k8s中service资源与pod详解
  • 原文地址:https://blog.csdn.net/weixin_42045639/article/details/126485374