文章分类

首页 / 文章分类 / 正文

Image

Spring Boot+Mybatis Plus +Spring Security 动态url权限控制

一,准备工作

1.1 导入相依的jar包pom

<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0"          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">     <modelVersion>4.0.0</modelVersion>     <groupId>com.huangan</groupId>     <artifactId>springSecurity02</artifactId>     <version>1.0-SNAPSHOT</version>     <parent>         <groupId>org.springframework.boot</groupId>         <artifactId>spring-boot-starter-parent</artifactId>         <version>2.1.9.RELEASE</version>     </parent>      <dependencies>          <!-- mvc -->         <dependency>             <groupId>org.springframework.boot</groupId>             <artifactId>spring-boot-starter-web</artifactId>         </dependency>          <!-- druid 连接池 -->         <dependency>             <groupId>com.alibaba</groupId>             <artifactId>druid-spring-boot-starter</artifactId>             <version>1.1.10</version>         </dependency>          <!-- mybatisPlus -->         <dependency>             <groupId>com.baomidou</groupId>             <artifactId>mybatis-plus-boot-starter</artifactId>             <version>3.1.0</version>         </dependency>          <!-- mybatis plus 代码生成器依赖 -->         <dependency>             <groupId>com.baomidou</groupId>             <artifactId>mybatis-plus-generator</artifactId>             <version>3.1.0</version>         </dependency>          <!-- 代码生成器模板 -->         <dependency>             <groupId>org.freemarker</groupId>             <artifactId>freemarker</artifactId>         </dependency>          <!-- lombok简化java代码 如果没有安装,先安装这个插件-->         <dependency>             <groupId>org.projectlombok</groupId>             <artifactId>lombok</artifactId>             <optional>true</optional>         </dependency>          <!-- mysql 依赖 -->         <dependency>             <groupId>mysql</groupId>             <artifactId>mysql-connector-java</artifactId>         </dependency>          <!-- 权限 -->         <dependency>             <groupId>org.springframework.boot</groupId>             <artifactId>spring-boot-starter-security</artifactId>         </dependency>          <!-- 阿里FastJson转换工具依赖 -->         <dependency>             <groupId>com.alibaba</groupId>             <artifactId>fastjson</artifactId>             <version>1.2.13</version>         </dependency>          <!-- StringUtils工具类 -->         <dependency>             <groupId>org.apache.commons</groupId>             <artifactId>commons-lang3</artifactId>             <version>3.6</version>         </dependency>          <!-- 用于生成、描述、调用和可视化 RESTful 风格的 Web 服务 -->         <dependency>             <groupId>io.springfox</groupId>             <artifactId>springfox-swagger2</artifactId>             <version>2.6.1</version>             <exclusions>                 <exclusion>                     <groupId>org.mapstruct</groupId>                     <artifactId>mapstruct</artifactId>                 </exclusion>             </exclusions>         </dependency>         <dependency>             <groupId>io.springfox</groupId>             <artifactId>springfox-swagger-ui</artifactId>             <version>2.6.1</version>         </dependency>         <dependency>             <groupId>io.springfox</groupId>             <artifactId>springfox-bean-validators</artifactId>             <version>2.6.1</version>         </dependency>      </dependencies> </project>

二,SpringBoot+Mybatis plus 搭建与使用

2.1 application.yml文件配置

#数据源 spring:   datasource:     driver-class-name: com.mysql.jdbc.Driver     #使用druid连接池     type: com.alibaba.druid.pool.DruidDataSource     url: jdbc:mysql://localhost:3306/security?serverTimezone=UTC     username: root     password: 123456  #mybatisPlus配置 mybatis-plus: global-config: db-config:   id-type:  auto   field-strategy: not_empty   table-underline:  true   db-type:  mysql   logic-delete-value: 1 # 逻辑已删除值(默认为 1)   logic-not-delete-value: 0 # 逻辑未删除值(默认为 0)   mapper-locations: classpath:/mapper/*.xml

2.2  MyBatisPlusConfig文件配置

package com.config.mybatisPlus;   import com.baomidou.mybatisplus.core.injector.ISqlInjector; import com.baomidou.mybatisplus.extension.injector.LogicSqlInjector; import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor; import com.baomidou.mybatisplus.extension.plugins.PerformanceInterceptor; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Profile;  /**  * mybatisPlus配置  */ @Configuration public class MyBatisPlusConfig {      /**      * @description: 配置分页插件      * @author: gradual      * @param: []      * @return: com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor      */     @Bean     public PaginationInterceptor paginationInterceptor() {         return new PaginationInterceptor();     }      /**      * @description: SQL执行效率插件      * @author: gradual      * @param: []      * @return: com.baomidou.mybatisplus.extension.plugins.PerformanceInterceptor      */     @Bean     @Profile({"test"})// 设置 dev test 环境开启     public PerformanceInterceptor performanceInterceptor() {         return new PerformanceInterceptor();     }      /**      * 逻辑删除用,3.1.1之后的版本可不需要配置该bean,但项目这里用的是3.1.0的      * @author David Hong      * @return com.baomidou.mybatisplus.core.injector.ISqlInjector      */     @Bean     public ISqlInjector sqlInjector() {         return new LogicSqlInjector();     } }

2.3 创建MybatisPlus 代码生成器 MysqlGenerator

package com.config.mybatisPlus;  import com.baomidou.mybatisplus.core.toolkit.StringPool; import com.baomidou.mybatisplus.generator.AutoGenerator; import com.baomidou.mybatisplus.generator.InjectionConfig; import com.baomidou.mybatisplus.generator.config.*; import com.baomidou.mybatisplus.generator.config.po.TableFill; import com.baomidou.mybatisplus.generator.config.po.TableInfo; import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy; import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;  import java.util.ArrayList; import java.util.List;  /**  * 代码生成器  */ public class MysqlGenerator {      /**      * RUN THIS      */     public static void main(String[] args) {         // 代码生成器         AutoGenerator mpg = new AutoGenerator();          // 全局配置         GlobalConfig gc = new GlobalConfig();         String projectPath = System.getProperty("user.dir");         gc.setOutputDir(projectPath + "/src/main/java");         // TODO 设置用户名         gc.setAuthor("huangan");         gc.setOpen(true);         // service 命名方式         gc.setServiceName("%sService");         // service impl 命名方式         gc.setServiceImplName("%sServiceImpl");         // 自定义文件命名,注意 %s 会自动填充表实体属性!         gc.setMapperName("%sMapper");         gc.setXmlName("%sMapper");         gc.setFileOverride(true);         gc.setActiveRecord(true);         // XML 二级缓存         gc.setEnableCache(false);         // XML ResultMap         gc.setBaseResultMap(true);         // XML columList         gc.setBaseColumnList(false);         mpg.setGlobalConfig(gc);          // TODO 数据源配置         DataSourceConfig dsc = new DataSourceConfig();         dsc.setUrl("jdbc:mysql://localhost:3306/security?serverTimezone=UTC");         dsc.setDriverName("com.mysql.jdbc.Driver");         dsc.setUsername("root");         dsc.setPassword("123456");         mpg.setDataSource(dsc);          // TODO 包配置         PackageConfig pc = new PackageConfig();         //pc.setModuleName(scanner("模块名"));         pc.setParent("com");         pc.setEntity("entity");         pc.setService("service");         pc.setServiceImpl("service.impl");         mpg.setPackageInfo(pc);          // 自定义需要填充的字段         List<TableFill> tableFillList = new ArrayList<TableFill>();         //如 每张表都有一个创建时间、修改时间         //而且这基本上就是通用的了,新增时,创建时间和修改时间同时修改         //修改时,修改时间会修改,         //虽然像Mysql数据库有自动更新几只,但像ORACLE的数据库就没有了,         //使用公共字段填充功能,就可以实现,自动按场景更新了。         //如下是配置         //TableFill createField = new TableFill("gmt_create", FieldFill.INSERT);         //TableFill modifiedField = new TableFill("gmt_modified", FieldFill.INSERT_UPDATE);         //tableFillList.add(createField);         //tableFillList.add(modifiedField);          // 自定义配置         InjectionConfig cfg = new InjectionConfig() {             @Override             public void initMap() {                 // to do nothing             }         };         List<FileOutConfig> focList = new ArrayList<>();         focList.add(new FileOutConfig("/templates/mapper.xml.ftl") {             @Override             public String outputFile(TableInfo tableInfo) {                 // 自定义输入文件名称                 return projectPath + "/src/main/resources/mapper/"                         + "/" + tableInfo.getEntityName() + "Mapper" +                          StringPool.DOT_XML;             }         });         cfg.setFileOutConfigList(focList);         mpg.setCfg(cfg);         mpg.setTemplate(new TemplateConfig().setXml(null));          // 策略配置         StrategyConfig strategy = new StrategyConfig();         strategy.setNaming(NamingStrategy.underline_to_camel);         strategy.setColumnNaming(NamingStrategy.underline_to_camel);         strategy.setEntityLombokModel(true);         // 设置逻辑删除键         strategy.setLogicDeleteFieldName("deleted");         // TODO 指定生成的bean的数据库表名         strategy.setInclude("t_sys_user_role");         //strategy.setSuperEntityColumns("id");         // 驼峰转连字符         strategy.setControllerMappingHyphenStyle(true);         mpg.setStrategy(strategy);         // 选择 freemarker 引擎需要指定如下加,注意 pom 依赖必须有!         mpg.setTemplateEngine(new FreemarkerTemplateEngine());         mpg.execute();     } }

2.4 运行代码生成器main方法生成对应文件