SpringBoot整合Druid-MybatisSpringSecurity使用

news/2024/4/26 20:10:59/文章来源:https://blog.csdn.net/yuqu1028/article/details/129250036

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.Driverusername: rootpassword: 123456url: 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.Driverusername: rootpassword: 123456url: jdbc:mysql://localhost:3306/sqltest?useSSL=true&useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTCtype: com.alibaba.druid.pool.DruidDataSource# springBoot默认不会配置以下属性值  需要手动绑定# druid 数据源专有配置initial-size: 5min-idle: 5max-active: 20max-wait: 60000time-between-eviction-runs-millis: 60000min-evictable-idle-time-millis: 300000validation-query: SELECT 1 FROM DUALtest-while-idle: truetest-on-borrow: falsetest-on-return: falsepool-prepared-statements: true#配置监控统计拦截的filters stat:监控统计、log4j日志记录  wall防御sql注入filters: stat,wall,log4jmax-pool-prepared-statement-per-connection-size: 20use-global-data-source-stat: trueconnection-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监控@Beanpublic 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;}@Beanpublic 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.pojomapper-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  多针对请求过滤  为不同角色配置不同的访问权限@Overrideprotected 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即可  或者关闭csrfhttp.csrf().disable();}// 认证@Overrideprotected 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进行整合进行功能扩展,需要导入两者整合的依赖,但是各个版本可能会存在不一样的问题。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_74946.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一文了解 requestAnimationFrame

requestAnimationFrame 的基本使用 requestAnimationFrame 是什么 window.requestAnimationFrame() 告诉浏览器——你希望执行一个动画&#xff0c;并且要求浏览器在下次重绘之前调用指定的回调函数更新动画。该方法需要传入一个回调函数作为参数&#xff0c;该回调函数会在浏…

腾讯前端二面常考vue面试题(附答案)

虚拟DOM真的比真实DOM性能好吗 首次渲染大量DOM时&#xff0c;由于多了一层虚拟DOM的计算&#xff0c;会比innerHTML插入慢。正如它能保证性能下限&#xff0c;在真实DOM操作的时候进行针对性的优化时&#xff0c;还是更快的。 MVVM的优缺点? 优点: 分离视图&#xff08;V…

MK60DX256VLQ10(256KB)MK60DN256VLQ10 Kinetis K60 MCU FLASH

MK60DX256VLQ10(256KB)MK60DN256VLQ10 Kinetis K60 MCU 32BIT 256KB FLASH 144LQFP【说明】Kinetis K6x MCU系列是一个可扩展的组合&#xff0c;具有不同级别的集成&#xff0c;提供丰富的模拟、通信、定时和控制外设套件&#xff0c;以适应广泛的需求。应用楼宇自动化控制器人…

数仓基础与hive入门

目录1、数仓数据仓库主流开发语言--SQL2、Apache Hive入门2.1 hive定义2.2 为什么使用Hive2.3 Hive和Hadoop关系2.4 场景设计&#xff1a;如何模拟实现Hive功能2.5 Apache Hive架构、组件3、Apache Hive安装部署3.1 metastore配置方式4、Hive SQL语言&#xff1a;DDL建库、建表…

【谷歌grc】recaptcha browser-error 错误

grc 谷歌人机验证错误 https://www.google.com/recaptcha/api/siteverif 返回错误信息 browser-error [{"success": false,"error-codes": ["browser-error"] }]之前都是调通能用的&#xff0c;突然之间就不能用了&#xff0c;查了半天也没有找…

蓝库云|什么是供应链管理?SCM对制造业的重要性

企业在产品的销售经营上&#xff0c;往往不会考量到供应链管理(SCM)的流程规划&#xff0c;但现今的商业环境与以往不同&#xff0c;高度竞争与客户不断提升的期望&#xff0c;藉由做好供应链管理(SCM)&#xff0c;才能更准时的提供优质产品与优良服务&#xff0c;增强企业竞争…

Qt 小项目 图片浏览系统

目录 引言 实现功能&#xff1a; 效果&#xff1a; 实现图片浏览所用知识: 实现流程&#xff1a; 实现环境和UI设计 具体实现 引言 本系统支持&#xff0c;自动播放&#xff0c;左右拖动切换&#xff0c;点击列表切换&#xff0c;点击按钮切换&#xff1b;是一个标准的…

职场性别报告,男女薪酬仍有差距,男性平均薪酬比女性高29.7%

性别是否影响职业&#xff1f;女性求职比男性更加困难&#xff1f;男性薪酬比女性更有优势&#xff1f;人们一说到警察、建筑师通常会想到高大魁梧的男性形象&#xff0c;一说到幼师、护士往往想到的都是温柔的女性形象&#xff0c;职业好似与性别挂钩&#xff1b;女性求职通常…

vue脚手架多页自动化生成实践

前言 在前端开发过程中&#xff0c;常常面对多种业务场景。到目前为止&#xff0c;前端对于不同场景的处理通常会采用不同的渲染方案来组合处理&#xff0c;常见的渲染方案包括&#xff1a;CSR(Client Side Rendering)、SSR(Server Side Rendering)、SSG(Static Site Generati…

LVGL8.3 集成 ST7789V 显示驱动和 CST816T 触摸屏驱动

LVGL8.3 集成 ST7789V 显示驱动和 CTS816S 触摸屏驱动起因效果&#xff08;正常显示&#xff0c;触摸屏可调换X&#xff0c;Y轴&#xff09;使用方式前提操作步骤最后参考起因 LVGL的ESP32 Drivers库中已经包含了大多数显示和触摸芯片的驱动&#xff0c;基本上只需要在MenuCon…

一些无线通信系统模型的概念

一些无线通信系统模型的概念 扩频通信,指的是系统的带宽WWW远大于其信息传输速率R(bits/s)R(bits/s)R(bits/s), 定义展频带因子BeWRB_e \frac{W}{R}Be​RW​, 易知在扩频通信系统中,BeB_eBe​远大于1. 在频率上产生如此大的冗余度,主要是为了减轻无线通信或卫星通信中经常产生…

SpringMVC——响应处理(1)【包含源码分析】

Controller public class JsonReturnController {ResponseBodyGetMapping("/getPet")public Pet getPet(){Pet petnew Pet();pet.setAge(5);pet.setName("lily");return pet;} }项目启动后 浏览器输入 http://localhost:8080/getPet 。 debug DispatcherS…

设备驱动模型--存储技术原理分析笔记 基于2.6.43内核

本文为读书笔记&#xff0c;详细内容参考《存储原理技术分析》1- 驱动模型2- 总线类型2.1- 重要数据结构总线bus_type 和 bus_type_private 互相可以找到对方struct bus_type {const char *name;struct bus_attribute *bus_attrs;struct device_attribute *dev_attrs;s…

BPMN2.0是什么,BPMN能解决企业流程管理中哪些问题?

一、前言&#xff1a; 在任何行业和企业中&#xff0c;一定存在着各式各样的流程&#xff0c;请假流程、报销流程、入职流程、离职流程、出差流程、合同审批流程、出入库流程等等…… 无论是管理者、技术人员还是业务人员&#xff0c;每天肯定也在使用各种流程&#xff0c;但…

Spring彻头彻尾的讲解,按照Spring框架启动流程,逐步剖析问题,不再是大杂烩!

文章目录1. 定义Spring Bean篇1.1 定义Spring Bean的几种方式1.1.1 XML文件定义Spring Bean1.1.2 JavaConfig定义Spring Bean1.1.3 Component注解定义SpringBean1.2 装配Spring Bean的四种常用方式1.2.1 手动装配 XML文件1.2.2 自动装配 XML文件1.2.3 手动装配 JavaConfig文…

C++常见类型及占用内存表

GPS生产厂家在定义数据的时候都会有一定的数据类型&#xff0c;例如double、int、float等&#xff0c;我们知道它们在内存中都对应了一定的字节大小&#xff0c;而我在实际使用时涉及到了端序的问题&#xff08;大端序高字节在前&#xff0c;小端序低字节在前&#xff09;&…

【ICCV2022】 CAPAO:一种高效的单阶段人体姿态估计模型

CAPAO&#xff1a;一种高效的单阶段人体姿态估计模型 重新思考关键点表示&#xff1a;将关键点和姿态建模作为多人姿态估计的对象&#xff08;Rethinking Keypoint Representations: Modeling Keypoints and Poses as Objects for Multi-Person Human Pose Estimation&#xf…

《数据库系统概论》学习笔记——第四章 数据库安全

教材为数据库系统概论第五版&#xff08;王珊&#xff09; 这一章简单记一下那几条sql的用法和两种存取控制和审计&#xff08;今年期末考了&#xff09;吧&#xff0c;不知道有啥好考的 数据库安全性 问题的提出 数据库的一大特点是数据可以共享数据共享必然带来数据库的安全…

idea远程调试线上jar包

有时候本地代码没问题但在线上运行会报错&#xff0c;这时候可以使用idea的remote功能调试线上jar包 步骤1 步骤2&#xff1a;新建remote 步骤3&#xff1a;配置服务器ip和端口 并复制生成的JVM参数供之后使用 步骤4&#xff1a;打jar包&#xff0c;并将生成的jar包放到服务…

Uncaught ReferenceError: jQuery is not defined

今天在拉取项目部署到本地的时候遇到了一个问题特此记录一下 &#xff08;以后闭坑&#xff09; 我和同事同时拉取了一样的代码&#xff0c;结果同事的页面加载正常而我的页面像被狗啃了一样&#xff0c;知道是js的问题但是不知道问题出在哪里&#xff1f;后来还是同事帮我解决…