SpringBoot整合Druid-Mybatis&SpringSecurity使用

2023-11-19

SpringBoot整合JDBC

创建springBoot项目时首先需要导入JDBC的支持,以及MySQL驱动

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<!--      mysql驱动  -->
<dependency>
  <groupId>com.mysql</groupId>
  <artifactId>mysql-connector-j</artifactId>
  <scope>runtime</scope>
</dependency>

配置yaml文件的数据源链接

spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    username: root
    password: 123456
    url: jdbc:mysql://localhost:3306/sqltest?useSSL=true&useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC

这里使用的是springBoot默认的数据源HikariDataSource,当然也可以继续使用其他扩展配置的数据源比如druid

springBoot内置各种组件,每个组件都有一个对应的原型Template类,我们可以通过该template类去调用对应的方法。并且spring会将该template进行自动装配

@Autowired // 自动装配bean:JdbcTemplate
private JdbcTemplate jdbcTemplate;
@GetMapping(value = "/userList")
@ResponseBody  // 返回值不走视图解析器  直接打印在视图
public List<Map<String,Object>> getBooks(){
  String sql = "select * from sqltest.books";
  List<Map<String, Object>> maps = jdbcTemplate.queryForList(sql);
  return maps;
}

整合Druid数据源

springBoot提供的数据源HikariDataSource是目前主流数据源中速度最快的,而Druid的优势就在于它拥有日志监控功能,通过访问监控页面,我们可以实时的看到执行了哪些sql、执行细节、执行时间、以及查看数据源信息等等

首先导入Druid数据源依赖,要想使用Druid的日志监控功能也还需要导入log4j日志依赖,两种方式。第一种是导入原生的Druid依赖,不依赖于SpringBoot。但是现在SpringBoot已经提供了对Druid的支持,所以可以使用第二种,依赖如下

<!--     配置springBoot支持的druid数据源 以及log4j日志   -->
<!-- https://mvnrepository.com/artifact/com.alibaba/druid -->
<dependency>
  <groupId>com.alibaba</groupId>
  <artifactId>druid-spring-boot-starter</artifactId>
  <version>1.1.22</version>
</dependency>
<dependency>
  <groupId>log4j</groupId>
  <artifactId>log4j</artifactId>
  <version>1.2.17</version>
</dependency>

去SpringBoot配置文件中配置Druid的参数

spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    username: root
    password: 123456
    url: jdbc:mysql://localhost:3306/sqltest?useSSL=true&useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC
    type: com.alibaba.druid.pool.DruidDataSource
    # springBoot默认不会配置以下属性值  需要手动绑定
    # druid 数据源专有配置
    initial-size: 5
    min-idle: 5
    max-active: 20
    max-wait: 60000
    time-between-eviction-runs-millis: 60000
    min-evictable-idle-time-millis: 300000
    validation-query: SELECT 1 FROM DUAL
    test-while-idle: true
    test-on-borrow: false
    test-on-return: false
    pool-prepared-statements: true
    #配置监控统计拦截的filters stat:监控统计、log4j日志记录  wall防御sql注入
    filters: stat,wall,log4j
    max-pool-prepared-statement-per-connection-size: 20
    use-global-data-source-stat: true
    connection-properties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500

创建Druid配置类

@Configuration
public class DruidConfig {

  @Bean
  @ConfigurationProperties(prefix = "spring.datasource")
  public DataSource druid(){
    return new DruidDataSource();
  }

  // 配置druid监控
  @Bean
  public ServletRegistrationBean statViewServlet(){
    ServletRegistrationBean<StatViewServlet> bean = new ServletRegistrationBean<>(new StatViewServlet(),"/druid/*");
    //      配置druid登录监控界面的用户名和密码
    HashMap<String, String> initParam = new HashMap<>();
    initParam.put("loginUsername","root");
    initParam.put("loginPassword","123456");
    // 访问权限控制
    //后台允许谁可以访问
    //initParams.put("allow", "localhost"):表示只有本机可以访问
    //initParams.put("allow", ""):为空或者为null时,表示允许所有访问
    initParam.put("allow","");
    //deny:Druid 后台拒绝谁访问
    // initParams.put("msb", "192.168.1.20");//表示禁止此ip访问
    // 初始化参数
    bean.setInitParameters(initParam);
    return bean;
  }
  @Bean
  public FilterRegistrationBean webStatFilter(){
    FilterRegistrationBean bean = new FilterRegistrationBean();

    bean.setFilter(new WebStatFilter());

    HashMap<String, Object> initParams = new HashMap<>();
    // 这些请求  不进行监控统计
    initParams.put("exclusions","*.js,*.css,/druid/*");
    bean.setInitParameters(initParams);
    return bean;
  }
}

整合MyBatis

导入依赖,mybatis提供了与springBoot整合的依赖资源,导入在Pom.xml文件中即可

<!-- springBoot整合mybatis依赖 -->
<!-- https://mvnrepository.com/artifact/org.mybatis.spring.boot/mybatis-spring-boot-starter -->
<dependency>
  <groupId>org.mybatis.spring.boot</groupId>
  <artifactId>mybatis-spring-boot-starter</artifactId>
  <version>2.1.3</version>
</dependency>

配置yaml文件,可以在yaml中绑定mybatis的核心配置文件、以及绑定mapper.xml的文件路径,和别名设置等

mybatis:
  type-aliases-package: com.yuqu.springboot02.pojo
  mapper-locations: classpath:mybatis/mapper/*.xml

mapper层

@Mapper  // 表示将该接口注册为bean托管给spring容器
@Repository  
public interface BookMapper {

也可以替换@Mapper为@MapperScan()设置扫描参数,扫描到的接口将会统一注册给spring管理

SpringSecurity

是一款基于Spring的安全框架,与shiro同是主流的安全性框架。使用springSecurity可以高效的针对“认证”和“权限”进行控制。所以springSecurity的两大核心就是用户认证Authentication用户授权Authorization

事实上,我们可以在不适用任何安全框架的情况下也可以实现对用户的认证和权限控制,比如拦截器。但是相对而言没有使用框架的可扩展性更高,并且使用更加方便。springsecurity已经封装好了大量的认证授权API供开发使用,我们只需要引入一个依赖即可

  1. 在创建的SpringBoot项目中引入springsecurity依赖即可
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-security</artifactId>
</dependency>
  1. 创建springSecurity配置类继承WebSecurityConfigurerAdapter,然后重写管理认证方法和授权方法
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

  // 授权 参数为http  多针对请求过滤  为不同角色配置不同的访问权限
  @Override
  protected void configure(HttpSecurity http) throws Exception {
    // 首页所有人可以访问
    // 功能也仅对应身份可以访问
    http.authorizeRequests()
      .antMatchers("/").permitAll()
      .antMatchers("/toLevel1/**").hasRole("vip1")
      .antMatchers("/toLevel2/**").hasRole("vip2")
      .antMatchers("/toLevel3/**").hasRole("vip3");
    // 没有权限自动跳转登录页  loginPage定制登录页面   loginProcessingUrl登录认证页面
 http.formLogin().loginPage("/toLogin").loginProcessingUrl("/login");
    // 开启注销功能  指定注销成功跳转页面
    http.logout().logoutSuccessUrl("/");
    // 開啓記住我功能  利用cookie實現 默認存活时间两周
    http.rememberMe().rememberMeParameter("remember");
    // 禁止csrf  跨站请求保护
    // SpringSecurity默认开启了CSRF防止网站攻击  会导致logout出现404因为logout为get请求
    // 可以将请求方式改为post即可  或者关闭csrf
    http.csrf().disable();
  }

  // 认证
  @Override
  protected void configure(AuthenticationManagerBuilder auth) throws Exception {
    System.out.println("查看是否生效");
    auth.inMemoryAuthentication().passwordEncoder(new BCryptPasswordEncoder())
      .withUser("root").password(new BCryptPasswordEncoder().encode("123456")).roles("vip1","vip2")
      .and().withUser("gppp").password(new BCryptPasswordEncoder().encode("123456")).roles("vip1");
    //There is no PasswordEncoder mapped for the id "null"
    // 需要设置密码加密
    System.out.println("很好,,,生效了");
  }
}

springsecurity也可以与thymeleaf进行整合进行功能扩展,需要导入两者整合的依赖,但是各个版本可能会存在不一样的问题。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SpringBoot整合Druid-Mybatis&SpringSecurity使用 的相关文章

  • 在 Java 中有效地对图像进行颜色循环

    我正在编写一个曼德尔布罗分形查看器 我想以智能的方式实现颜色循环 给定一个图像 我想修改它的 IndexColorModel 据我所知 没有办法修改 IndexColorModel 也没有办法为图像提供新的 IndexColorModel
  • Eclipse 中的 Java 简单电子邮件程序

    我想制作一个简单的程序 您可以从其中发送电子邮件命令行 我找到了这个教程 http www tutorialspoint com java java sending email htm http www tutorialspoint com
  • Java简单加密

    我想加密存储在磁盘上的文本 配置 文件 尝试使用DES http en wikipedia org wiki Data Encryption Standard加密 我在客户端计算机上遇到了致命错误 后来我发现该算法无法处理重音字符 我怀疑这
  • 在游戏框架中编写功能测试的正确方法

    在为基于 play1 2 4 的 web 应用程序编写功能测试时 我对如何正确编码感到有点困惑 困惑在于所涉及的事务边界 我在某处读到每个测试都有自己的事务 在我的应用程序中 用户可以登录并向购物车添加一些商品 然后他可以提供一个地址 以便
  • 逐行读取 JTextPane

    有没有办法读取a的内容JTextPane逐行 很像 BufferedReader 吗 Element root textPane getDocument getDefaultRootElement 获得根元素后 您可以检查存在多少个子元素
  • Java:BufferedInputStream 的 available() 方法存在问题

    我正在处理以下代码 用于将大文件拆分为一组较小的文件 FileInputStream input new FileInputStream this fileToSplit BufferedInputStream iBuff new Buff
  • 平衡括号问题的优化解

    给定一个仅包含字符的字符串 and 判断输入字符串是否有效 输入字符串在以下情况下有效 左括号必须由相同类型的括号封闭 左括号必须按正确的顺序关闭 请注意 空字符串也被视为有效 示例1 Input Output true Example 2
  • 使用用户名进行 Java LDAP 身份验证

    好吧 这让我发疯 我正在尝试使用 Java 创建 LDAP 身份验证 如果我在 SECURITY PRINCIPAL 中使用我的名字和姓氏 一切都很好 这是我的代码 try Hashtable
  • 使用 Thymeleaf 时我们应该删除 HTML 属性吗?

    我正在研究 Thymeleaf 发现几乎所有示例中都有 Thymeleaf 的标签值以及标准 HTML 值 例如 这些
  • Hibernate、MySQL 视图和 hibernate.hbm2ddl.auto = 验证

    我可以在 Hibernate 中使用 MySQL 视图 将它们视为表 即 该实体与为表创建的实体没有什么不同 但是 当 Hibernate 设置为验证模型时 我的应用程序将不会部署 因为它找不到视图 因为它假设它是一个表 是否可以在启用部署
  • Knuth-Morris-Pratt 算法

    解决方案是Knuth Morris Pratt 算法 https en wikipedia org wiki Knuth E2 80 93Morris E2 80 93Pratt algorithm 干草堆 AAAAAAAAA 针 AAA
  • Android 上的自定义视图和窗口属性

    我想要做的是在我的应用程序顶部添加一个视图 该视图类似于过滤器视图 我想操纵屏幕的颜色 并且我还希望能够同时更改屏幕的亮度时间 这两件事似乎是分开起作用的 但不能一起起作用 这是我的代码 添加视图 colourView new Layer
  • 在 JSF 自定义验证器中区分 ajax 请求和完整请求

    我的验证器需要知道它是完整请求还是 ajax 请求 在我当前的解决方案中 我检查 http 请求标头X Requested With元素 public void validate FacesContext context UICompone
  • 添加和完成 PHP 源代码文档的工具 [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我有几个已完成的较旧的 PHP 项目 其中有很多内容 我想以 javadoc phpDocumentor
  • 基于Java模式分割字符串

    您好 我有以下模式的日志文件 2014 03 06 03 21 45 432 ERROR mfs pool 3 thread 19 dispatcher StatusNotification Error processing notific
  • 错误:列“this_.phitorsionangle”必须出现在 GROUP BY 子句中或在聚合函数中使用

    我在执行 sql 查询时遇到了一些问题 我正在使用 Hibernate Criteria 来构建查询 我通过按一定间隔 binSize 舍入值然后对它们进行分组来从数据库创建一些容器 当我直接在 SQL 中使用查询尝试时 效果非常好 SEL
  • JavaFX 8 默认消息图标

    随着 JavaFX 的最近几次更新 我们收到了警报 我想获取消息的默认图标 错误 警告 在Swing中 我可以通过一些方式获取L F消息图标UIManager的属性 如何在 JavaFX 中获取消息的默认图标 它们是包含在属性中 还是由 C
  • 使用 OpenNLP 获取句子的解析树。陷入困境。

    OpenNLP 是一个关于自然语言处理的 Apache 项目 NLP 程序的目标之一是解析一个句子 并给出其语法结构的树 例如 天空是蓝色的 这句话 可能会被解析为 S NP VP The sky is blue where S是句子 NP
  • Java分数计算器

    我对 Java 编程还很陌生 我的 AP 计算机编程课程有作业要完成 所以请耐心等待 我必须弄清楚如何将两个分数相乘 我想知道是否有任何方法可以在方法内部声明变量并在该方法外部使用它 我在介绍方法中的 while 循环 谢谢您 希望这不会令
  • 丰富:数据表行跨度问题

    我需要创建一个 rich dataTable 甚至扩展 具有以下功能 我有一个公司类 其中包含产品对象的集合 我想展示下表 我仍然没有弄清楚如何使用子表执行此操作 在所有示例中 我发现子表具有与主表完全相同的列 据推测 我需要在前两列中使用

随机推荐

  • ubantu16.04安装Anaconda

    1 官网下载安装包 我下载的是python 3 10版本的 后续用tvm要求python版本在 3 7 3 8 记得创建一个虚拟环境 Anaconda历史版本链接 https repo anaconda com archive 2 开始安装
  • 【项目实战】复旦微MCU+RT-thread+Moudbus(1)

    前言 手头存货FM33LC046芯片 复旦微提供的是freertos和rthread nano的例子 一直想使用RTThread完整版 MCU由于ROM有限 项目因此不可能太复杂 怕后期资源不够 第一步 git源码https gitee c
  • Activiti-设置全局变量的四种方法

    1 在流程启动的时候设置全局变量 在流程启动时设置全局变量 Test public void startProcessInstance 得到runtimeService RuntimeService runtimeService proce
  • 如何在Controller层实现事务管理?

    在spring aop 事务管理中发现 我们是在service层实现的事务管理 现在有如下场景 大家讨论下看如何实现 ControllerA ControllerB ControllerC 共同依赖ServiceA ServiceB 上述C
  • Java特训的第一天——开篇

    我是一名刚入门的Java菜鸟 我选择Java的原因是因为其语法简单 功能强大 从web 到桌面 到嵌入式 无所不能 下面我将谈一谈我对Java语言的认识 Java语言概述 关于Java的介绍网上有很详细的阐述 我在这里就不再细述了 下面只简
  • 非谓语动词

    文章目录 1 to 动词原形或动词原形 ing 1 1 动词不定式 1 2 动名词 2 假主语 真主语和不定式 动名词的否定式 2 1 形式主语 2 2 形式宾语 2 3 动名词或不定式否定 3 to不定式表示目的 4 常见的不定式和动名词
  • 【vue网站优化】秒开网页

    vue网站优化 网页渲染速度快到极致 在将打包后的dist目录上传到服务器时 往往会出现首次加载页面速度较慢的情况 以下给出几点优化意见 在路由配置文件中 采用路由懒加载 当打包构建应用时 JavaScript 包会变得非常大 影响页面加载
  • SQL注入的常见方式

    目录 联合查询 union 函数介绍 order by union select 操作 布尔盲注 and or 函数介绍 mid 从中间截取字符 left 从左开始截取字符 ord ascii 转成ascii码 length 统计长度 an
  • 循环嵌套与简单调用

    循环嵌套与简单调用 一 循环嵌套 1 循环嵌套 for 条件初始化 条件判断 条件变化 重复执行的代码 for 条件初始化 条件判断 条件变化 重复执行的代码 重复执行的代码 特点 外层循环执行一次 内层小循环执行一轮 从开始到结束 外层循
  • C0202 [2010普及组-A]数字统计(C语言写)

    题目描述 请统计某个给定范围 L R 的所有整数中 数字 2 出现的次数 比如给定范围 2 22 数字 2在数 2 中出现了 1 次 在数 12 中出现 1 次 在数 20 中出现 1 次 在 数 21中出现 1 次 在数 22 中出现 2
  • QT5.15编译2

    准备工作 必须 第一步 Qt 源码下载 https download qt io official releases qt Qt Creator 源码下载 https download qt io official releases qtc
  • RabbitMQ重复消费

    文章目录 前言 重复消费问题 方法一 消息幂等性 方法二 消息去重 前言 解决 RabbitMQ 重复消费问题是消息队列应用中非常重要的一部分 在实际应用中 可能会出现消费者因某种原因 例如网络问题 应用崩溃等 在处理消息时失败 然后重新开
  • 4.2.1测试网络基础结构配置

    测试网络基础结构配置 ID WSTG CONF 01 总结 互连和异构 Web 服务器基础结构 可能包括数百个 Web 应用程序 的内在复杂性使得配置管理和审查成为测试和部署每个应用程序的基本步骤 只需要一个漏洞就可以破坏整个基础架构的安全
  • HTTP(GET/POST)请求过程中的编码问题

    一 问题 编码问题是JAVA初学者在web开发过程中经常会遇到问题 网上也有大量相关的文章介绍 但其中很多文章并没有对URL中使用了中文等非ASCII的字 符造成服务器后台程序解析出现乱码的问题作出准确的解释和说明 本文将详细介绍由于在UR
  • MATLAB中的eps的详细解释及用法

    1 首先 eps是一个函数 它表示的是一个数可以分辨的最小精度 默认时它表示1到它下一个浮点数之间的距离的一半 而正好等于最大小于1的浮点数到最小大于1的浮点数之间的距离 eps 2 2204e 16 下面是eps的默认精度 注 以下演示环
  • git高级用法之rebase

    rebase的高级用法 这里介绍两种高级用法 1 合并连续的或者不连续的两个提交记录 删除任意一个提交记录 改变提交记录的先后顺序 2 通过rebase合并分支 合并连续的两个提交 如下图的场景 gl是git log的缩写 不过也没这么简单
  • mybatis 循环集合查询

    数据库语句为 select from user where 张三 李四 王五 那么想用mybatis Mapper y entity 定义一个集合属性作为参数 private List searchName dao层 定义一个映射mappe
  • 使用MobaXterm连接到远程服务器

    仅供参考 文章目录 TOC 文章目录 一 前期准备 二 步骤 1 点击上册工具栏的Session 在弹出的窗口里选择SSH 2 点击Network settings 再点击中间的jump host 3 在弹出界面填入所需信息 并点击OK保存
  • 云原生服务更换二进制调测方法

    当前我们开发的服务基本都是云原生的服务 都跑在容器中 在开发过程中 想更换二进制文件调测就相当麻烦了 今天写了一个脚本 供大家参考 bin bash set ex appName testApp appPath home appName c
  • SpringBoot整合Druid-Mybatis&SpringSecurity使用

    SpringBoot整合JDBC 创建springBoot项目时首先需要导入JDBC的支持 以及MySQL驱动