栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

shiro(二)

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

shiro(二)

自定义Realm
数据表设计

SET FOREIGN_KEY_CHECKS=0;

-- ----------------------------
-- Table structure for `tb_permissions`
-- ----------------------------
DROP TABLE IF EXISTS `tb_permissions`;
CREATE TABLE `tb_permissions` (
  `permission_id` int NOT NULL AUTO_INCREMENT,
  `permission_code` varchar(60) DEFAULT NULL,
  `permission_name` varchar(60) DEFAULT NULL,
  PRIMARY KEY (`permission_id`)
) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

-- ----------------------------
-- Records of tb_permissions
-- ----------------------------
INSERT INTO `tb_permissions` VALUES ('1', 'sys:c:save', '入库');
INSERT INTO `tb_permissions` VALUES ('2', 'sys:c:delete', '出库');
INSERT INTO `tb_permissions` VALUES ('3', 'sys:c:update', '修改');
INSERT INTO `tb_permissions` VALUES ('4', 'sys:c:save', '查询');
INSERT INTO `tb_permissions` VALUES ('5', 'sys:x:save', '新增订单');
INSERT INTO `tb_permissions` VALUES ('6', 'sys:x:delete', '删除订单');
INSERT INTO `tb_permissions` VALUES ('7', 'sys:x:update', '修改订单');
INSERT INTO `tb_permissions` VALUES ('8', 'sys:x:find', '查询订单');
INSERT INTO `tb_permissions` VALUES ('9', 'sys:k:save', '新增客户');
INSERT INTO `tb_permissions` VALUES ('10', 'sys:k:delete', '删除客户');
INSERT INTO `tb_permissions` VALUES ('11', 'sys:k:update', '修改客户');
INSERT INTO `tb_permissions` VALUES ('12', 'sys:k:find', '查询客户');

-- ----------------------------
-- Table structure for `tb_roles`
-- ----------------------------
DROP TABLE IF EXISTS `tb_roles`;
CREATE TABLE `tb_roles` (
  `role_id` int NOT NULL AUTO_INCREMENT,
  `role_name` varchar(60) DEFAULT NULL,
  PRIMARY KEY (`role_id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

-- ----------------------------
-- Records of tb_roles
-- ----------------------------
INSERT INTO `tb_roles` VALUES ('1', 'admin');
INSERT INTO `tb_roles` VALUES ('2', 'cmanager');
INSERT INTO `tb_roles` VALUES ('3', 'xmanager');
INSERT INTO `tb_roles` VALUES ('4', 'kmanager');
INSERT INTO `tb_roles` VALUES ('5', 'zmanager');

-- ----------------------------
-- Table structure for `tb_rps`
-- ----------------------------
DROP TABLE IF EXISTS `tb_rps`;
CREATE TABLE `tb_rps` (
  `rid` int NOT NULL,
  `pid` int NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

-- ----------------------------
-- Records of tb_rps
-- ----------------------------
INSERT INTO `tb_rps` VALUES ('2', '1');
INSERT INTO `tb_rps` VALUES ('2', '2');
INSERT INTO `tb_rps` VALUES ('2', '3');
INSERT INTO `tb_rps` VALUES ('2', '4');
INSERT INTO `tb_rps` VALUES ('3', '5');
INSERT INTO `tb_rps` VALUES ('3', '6');
INSERT INTO `tb_rps` VALUES ('3', '7');
INSERT INTO `tb_rps` VALUES ('3', '8');
INSERT INTO `tb_rps` VALUES ('3', '4');
INSERT INTO `tb_rps` VALUES ('3', '9');
INSERT INTO `tb_rps` VALUES ('3', '10');
INSERT INTO `tb_rps` VALUES ('3', '11');
INSERT INTO `tb_rps` VALUES ('3', '12');
INSERT INTO `tb_rps` VALUES ('4', '11');
INSERT INTO `tb_rps` VALUES ('4', '12');
INSERT INTO `tb_rps` VALUES ('5', '4');
INSERT INTO `tb_rps` VALUES ('5', '8');
INSERT INTO `tb_rps` VALUES ('5', '12');

-- ----------------------------
-- Table structure for `tb_urs`
-- ----------------------------
DROP TABLE IF EXISTS `tb_urs`;
CREATE TABLE `tb_urs` (
  `uid` int NOT NULL,
  `rid` int NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

-- ----------------------------
-- Records of tb_urs
-- ----------------------------
INSERT INTO `tb_urs` VALUES ('1', '1');
INSERT INTO `tb_urs` VALUES ('1', '2');
INSERT INTO `tb_urs` VALUES ('2', '2');
INSERT INTO `tb_urs` VALUES ('3', '3');
INSERT INTO `tb_urs` VALUES ('4', '4');
INSERT INTO `tb_urs` VALUES ('5', '5');
INSERT INTO `tb_urs` VALUES ('1', '3');
INSERT INTO `tb_urs` VALUES ('1', '4');
INSERT INTO `tb_urs` VALUES ('1', '5');

-- ----------------------------
-- Table structure for `tb_users`
-- ----------------------------
DROP TABLE IF EXISTS `tb_users`;
CREATE TABLE `tb_users` (
  `id` int NOT NULL AUTO_INCREMENT,
  `username` varchar(100) DEFAULT NULL,
  `password` varchar(20) DEFAULT NULL,
  `password_salt` varchar(60) DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `username` (`username`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

-- ----------------------------
-- Records of tb_users
-- ----------------------------
INSERT INTO `tb_users` VALUES ('1', 'niudun', '123456', null);
INSERT INTO `tb_users` VALUES ('2', 'kaipulei', '123456', null);
INSERT INTO `tb_users` VALUES ('3', 'aiyinsitan', '123456', null);
INSERT INTO `tb_users` VALUES ('4', 'maikesiwei', '123456', null);
INSERT INTO `tb_users` VALUES ('5', 'gaosi', '123456', null);

realm数据从dao层来,shiro认证需要用户信息
在新建一个springboot项目,其中的依赖(如下,给予参考)



    4.0.0
    com.wh
    shirodemo2
    0.0.1-SNAPSHOT
    shirodemo2
    Demo project for Spring Boot

    
        1.8
        UTF-8
        UTF-8
        2.3.7.RELEASE
    

    
        
            org.springframework.boot
            spring-boot-starter-thymeleaf
        
        
            org.springframework.boot
            spring-boot-starter-web
        
        
            org.mybatis.spring.boot
            mybatis-spring-boot-starter
            2.1.4
        

        
            com.alibaba
            druid-spring-boot-starter
            1.1.10
        

        
            mysql
            mysql-connector-java
            runtime
        
        
            org.projectlombok
            lombok
            true
        
        
            org.springframework.boot
            spring-boot-starter-test
            test
            
                
                    org.junit.vintage
                    junit-vintage-engine
                
            
        
    

    
        
            
                org.springframework.boot
                spring-boot-dependencies
                ${spring-boot.version}
                pom
                import
            
        
    

    
        
            
                org.apache.maven.plugins
                maven-compiler-plugin
                3.8.1
                
                    1.8
                    1.8
                    UTF-8
                
            
            
                org.springframework.boot
                spring-boot-maven-plugin
                2.3.7.RELEASE
                
                    com.wh.shirodemo2.Shirodemo2Application
                
                
                    
                        repackage
                        
                            repackage
                        
                    
                
            
        
    


配置application.yml

spring:
  datasource:
    druid:
      url: jdbc:mysql://localhost:3306/db_shiro2?serverTimezone=CST&useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&useSSL=true
      driver-class-name: com.mysql.cj.jdbc.Driver
      username: root
      password: 123456
      initial-size: 1
      min-idle: 1
      max-active: 20
mybatis:
  mapper-locations:  classpath:com/wh/mapper
public class MyRealm  extends AuthorizingRealm {
    @Resource
    private UsersDao usersDao;
    @Resource
    private RoleDao roleDao;
    @Resource
    private PermissionDao permissionDao;

    @Override
    public String getName() {
        return "myrealm";
    }
    @Override
    protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) {
//       获取授权信息
//        把当前用户的角色和权限查询出来
//        认证成功才能获取权限
        
        String username  = (String) principalCollection.iterator().next();
//获取当前用户的用户名
//        根据用户名查询用户的角色列表和权限列表
        Set rolename = roleDao.queryRoleNameByUsername(username);
        Set ps = permissionDao.queryPermissionByUsername(username);
        SimpleAuthorizationInfo info = new SimpleAuthorizationInfo();
        info.setRoles(rolename);
        info.setStringPermissions(ps);
        return info;
    }

    @Override
    protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken) throws AuthenticationException {
//        获取认证信息.认证的安全数据
        //参数authenticationToken就是传递subject.login(token)
        UsernamePasswordToken token = (UsernamePasswordToken) authenticationToken;
        String username = token.getUsername();
//        根据用户名从数据查询用户的安全数据
            Users users = usersDao.queryUserByusername(username);
            if (users==null){
                return null;
            }
            AuthenticationInfo info=  new SimpleAuthenticationInfo(username,users.getUserPwd(),getName());
            return  info;
    }
}

shiroConfig

package com.wh.shirodemo2.config;
import org.apache.shiro.mgt.DefaultSecurityManager;
import org.apache.shiro.mgt.SecurityManager;
import org.apache.shiro.spring.web.ShiroFilterFactoryBean;
import org.apache.shiro.web.mgt.DefaultWebSecurityManager;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.util.HashMap;
@Configuration
public class ShiroConfig {
// shrio
//  自定义realm



    @Bean
    public MyRealm getMyrealm(){
        MyRealm myRealm = new MyRealm();
        return myRealm;
    }
//      securitymanager
    @Bean
    public DefaultWebSecurityManager getDefaultSecurityManager(MyRealm myRealm){
        DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();
//      securityManager要完成效验,需要realm
        securityManager.setRealm(myRealm);
        return securityManager;
    }
    //    配置过滤器
    @Bean
    public ShiroFilterFactoryBean shiroFilterFactoryBean(DefaultSecurityManager securityManager){
        ShiroFilterFactoryBean filter=new ShiroFilterFactoryBean();
        filter.setSecurityManager(securityManager);
        HashMap filtermap = new HashMap<>();
        filtermap.put("/","anon");
        filtermap.put("/index.html","anon");
        filtermap.put("/login.html","anon");
        filtermap.put("/regist.html","anon");
        filtermap.put("/user/login","anon");
        filtermap.put("/layui/**","anon");
        filtermap.put("/**","authc");
        filter.setFilterChainDefinitionMap(filtermap);
        filter.setLoginUrl("/login.html");
        filter.setUnauthorizedUrl("/login.html");
        return filter;
    }
}

后面的service,controller,前端的内容可以复制博客shiro(一)里面的内容。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1005337.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号