java
Koorye
什么都想学
展开
-
Spring Boot 源码分析——RequestContextHolder 与 ThreadLocal
笔者一直在思考 Shiro 如何通过 SecurityUtils 拿到当前用户。原来是对于每个 HTTP 请求,在 Java 中都会开启一个线程进行处理,这个线程内就存放了当前的请求与请求信息,Shiro 通过当前线程,就可以拿到对应的 HTTP 请求,从而拿到当前用户。进一步考虑,Spring Boot 是如何实现这一过程的呢?Spring Boot 如何为每个请求分配线程,在线程中注入请求信息,又如何通过线程取出请求呢?RequestContextHolder源码:public abstrac原创 2020-12-10 20:58:13 · 2350 阅读 · 3 评论 -
【Elasticsearch 自学笔记三】Spring Boot 整合 ES
文章目录导入依赖编写配置索引操作字段操作创建实体类创建接口调用接口方法复杂搜索结果分页与排序使用 @Query使用 NativeQuery这一期我们用 Spring Boot + Spring Data Elasticsearch 整合 ES.导入依赖选用 Idea 快速创建 Spring Boot 项目,选择:Spring Data ElasticsearchLombok <!-- Spring Data Elasticsearch --> <depend原创 2020-08-06 16:14:49 · 401 阅读 · 0 评论 -
【Elasticsearch 自学笔记二】IK 中文分词器和搜索语法
文章目录IK 中文分词器测试自定义词典ES 搜索语法keyword 和 text 的区别测试过滤搜索结果结果分页与排序逻辑查询区间查询结果高亮ES 作为一个搜索引擎,拥有高效且功能齐全搜索算法,这一期我们来了解一下其细节。IK 中文分词器ES 并不支持中文词语的切割,当使用中文时,我们输入的词汇会被切割成一个个单子,而不能组成我们想要的词语。幸运的是,ES 人性化的支持各种插件的安装,通过安装 IK 分词器,我们就可以解决这个问题。在 Docker 中,我们需要先进入容器,不用 Docker 可原创 2020-08-06 01:47:15 · 819 阅读 · 0 评论 -
【Elasticsearch 自学笔记一】什么是 ES? ES 的基本安装和使用
文章目录什么是 ES?Docker 安装 ESDocker 安装 Kibana配置 Docker 网络基本使用索引操作字段操作Elasticsearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java语言开发的,并作为Apache许可条款下的开放源码发布,是一种流行的企业级搜索引擎。Elasticsearch用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。官方客户端在Java、.NE原创 2020-08-06 01:46:40 · 406 阅读 · 0 评论 -
【Shiro 自学笔记八】Spring Boot 环境下 Shiro 整合 JWT
文章目录自定义 token自定义 Realm自定义 Filter配置网络安全管理器配置过滤规则登录控制器全局异常控制器测试这一期我们用 Shiro 整合 JWT。自定义 token我们之前使用 Shiro 提供的 UsernamePasswordToken,这次我们需要自定义一个 token,实现空参构造、全参构造、GetSet:@NoArgsConstructor@AllArgsConstructor@Getter@Setterpublic class JwtPasswordToken原创 2020-07-25 18:03:46 · 299 阅读 · 0 评论 -
【Shiro 自学笔记七】 什么是 JWT?Shiro 整合JWT
文章目录什么是 JWTSession 的缺陷JWT 的结构JWT 的生成和解析导入依赖编写工具类测试基于 JWT 的用户认证编写拦截器配置拦截规则编写控制器测试主流的双 token 认证方案主流的双 token 认证方案JWT 全称 JSON Web Token,是一种用于通信双方之间传递安全信息的简洁的、URL安全的表述性声明规范,经常用在跨域身份验证。本期内容与 Shiro 无关,不过在下一期我们就会整合 Shiro 和 JWT。什么是 JWTJWT 是一种可以携带信息的加密串,加密时可以将各原创 2020-07-25 18:01:59 · 654 阅读 · 0 评论 -
【Shiro 自学笔记六】Shiro 的默认缓存机制和 Redis 实现缓存
文章目录Shiro 的登录验证机制Shiro 的默认缓存机制导入依赖配置 RealmRedis 实现缓存导入依赖修改配置配置 Redis 序列化编写 Service 层配置 Redis 缓存配置 Redis 缓存管理器修改 Shiro 配置类测试上一期我们实现了登录验证,然而,每次登录 Shiro 都需要去查询一次数据库,而查询数据库是极其耗费资源的,因此,我们需要引入缓存来减小资源开支。Shiro 的登录验证机制我们给 Service 层加入日志打印,再行测试:@Servicepublic c原创 2020-07-24 22:29:06 · 2416 阅读 · 0 评论 -
【Shiro 自学笔记五】Spring Boot 整合 Shiro + Spring Data JPA 加密与验证
文章目录配置数据库编写工具类整合 Spring Data JPA编写实体类编写 Dao 层编写 Service 层编写控制器注册测试实现登录编写 Dao 层编写 Service 层编写控制器设置算法与散列加盐测试上一期我们整合了 Spring Boot,但是用的是假数据而且是明文。这一期我们将实现数据库整合和加密。配置数据库建立一个数据表,设立 3 个列:id INT 自增主键username VARCHAR(16) 非空password VARCHAR(16) 非空建表语句原创 2020-07-24 03:33:41 · 540 阅读 · 0 评论 -
【Shiro 自学笔记四】Spring Boot 整合 Shiro
文章目录导入依赖自定义 Realm编写基本配置编写配置类配置过滤规则编写 Realm实现登录这一期我们将使用 Spring Boot 整合 Shiro 并实现登录验证和授权认证功能。导入依赖使用 Idea 快速构建项目,选择:Spring Develop ToolsLombokSpring WebSpring Data JPA (笔者使用 Spring Data JPA 整合数据库,你也可以使用 MyBatis 等框架)MySQL Connector for Java (MySQL原创 2020-07-24 03:32:43 · 242 阅读 · 0 评论 -
【Shiro 自学笔记三】Shiro 的授权机制
文章目录授权的概念主体资源权限角色授权的类型基于角色的访问控制基于资源的访问控制判断是否授权编程式注解式标签式实现授权和判断这一期来了解一下 Shiro 的授权。授权的概念主体主体,即访问应用的用户,在 Shiro 中使用 Subject 代表用户。用户只有授权后才允许访问相应的资源。资源在应用中用户可以访问的任何东西都称为资源。用户只有授权后才能访问。权限安全策略中的原子授权单位,通过权限我们可以表示在应用中用户有没有操作某个资源的权利。即权限表示在应用中用户能不能访问某个资源。Shi原创 2020-07-24 03:31:16 · 526 阅读 · 0 评论 -
【Shiro 自学笔记二】自定义 Realm 实现 MD5 加密、加盐与再散列
文章目录什么是MD5加盐散列Shiro 实现 MD5 加密基本 MD5 加密加盐与散列自定义 Realm 实现登录验证自定义 Realm 实现 MD5 加密声明加密算法声明加盐和散列上一期我们完成了基本的登录操作,然而,直接通过明文密码登录显然是非常不安全的。因此,我们必须对密码进行加密以加强信息的安全性。什么是MD5MD5信息摘要算法(英语:MD5 Message-Digest Algorithm),一种被广泛使用的密码散列函数,可以产生出一个128位(16字节)的散列值(hash value)原创 2020-07-24 03:30:41 · 424 阅读 · 0 评论 -
【Shiro 自学笔记一】Shiro 的基本流程与 Hello World
文章目录什么是 ShiroShiro 核心组件SubjectSecurityManagerRealmsHello World配置pom.xmlShiro 配置文件Main 方法Apache Shiro是一个强大且易用的Java安全框架,执行身份验证、授权、密码和会话管理。使用Shiro的易于理解的API,您可以快速、轻松地获得任何应用程序,从最小的移动应用程序到最大的网络和企业应用程序。—— 摘自百度百科什么是 ShiroShiro 是 Apache 公司开发的一款安全框架。它支持 Jav原创 2020-07-24 03:30:03 · 274 阅读 · 0 评论 -
【Redis自学笔记六】Docker搭建Redis集群,主从复制和哨兵模式
title: 【Redis自学笔记六】Docker搭建Redis集群,主从复制和哨兵模式date: 2020-7-21 3:14:50categories: Javatags:JavaRedisLinux在日常生产中,配置Redis集群是基本需求。Redis集群可以实现读写分离、主写从读,从而提高读写效率。同时,Redis集群可以在一台服务器宕机时有替代服务器。接下来我们就来搭建集群。主从复制主从复制模型中,有多个Redis节点。其中,有且仅有一个为主节点Master。从节点Sl.原创 2020-07-21 05:35:15 · 230 阅读 · 0 评论 -
【Redis自学笔记五】配置文件、持久化与发布订阅
文章目录基本配置持久化介绍RDBAOF持久化配置RDBAOF关于AOF文件重写修改发布订阅本期我们来细看Redis的配置文件,通过配置文件了解Redis的持久化等机制。基本配置unit单位对大小写不敏感:# 1k => 1000 bytes# 1kb => 1024 bytes# 1m => 1000000 bytes# 1mb => 1024*1024 bytes# 1g => 1000000000 bytes# 1gb => 1024*1024*1原创 2020-07-21 01:55:31 · 329 阅读 · 0 评论 -
【Redis自学笔记四】Jedis和Spring Boot整合Redis
文章目录Jedis导入依赖配置Redis测试连接使用Spring Boot自定义序列化Jedis是官方推荐的Redis Java连接开发工具。这一期我们来了解Jedis和Spring Boot如何整合Redis。Jedis我们从创建Maven项目开始。导入依赖 <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId&g原创 2020-07-21 00:17:13 · 333 阅读 · 0 评论 -
【Redis自学笔记三】Redis的特殊数据类型、事务和乐观锁
文章目录Geospatial基本命令Hyperloglog基本命令Bitmaps基本命令事务乐观锁Geospatial即地理类型,我们可以通过geoadd key longtitude latitude member声明一个地理类型,有效经度从-180到180,有效纬度从-85.05112878到85.05112878,例:127.0.0.1:6379> geoadd city 116.40 39.90 Beijing(integer) 1基本命令geopos key member 获原创 2020-07-21 00:16:37 · 142 阅读 · 0 评论 -
【Redis自学笔记二】Redis的基本命令和数据类型
文章目录基本命令Get / Del / Type其他数据类型StringSet / Get 方法基本命令List基本命令Set基本命令Hash基本命令Zset基本命令上一期我们完成了Redis的安装,本期将开始使用Redis的一些命令和了解数据类型。基本命令首先说明,Redis的所有命令大小写不敏感,甚至可以大小写混用。Get / Del / Type其他keys pattern 正则表达式匹配存在的key,例:key * 匹配所有keytype key 查看key类型del key原创 2020-07-20 10:38:02 · 132 阅读 · 0 评论 -
【Redis自学笔记一】什么是NoSQL?Docker启动Redis
文章目录什么是NoSQLNoSQL的类型Ubuntu安装RedisDocker安装RedisRedis(Remote Dictionary Server ),即远程字典服务,是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。从2010年3月15日起,Redis的开发工作由VMware主持。从2013年5月开始,Redis的开发由Pivotal赞助。—— 摘自百度百科什么是NoSQLNoSQL,泛指非关系型的数据库。原创 2020-07-20 10:36:55 · 103 阅读 · 1 评论 -
【RabbitMQ自学笔记四】Docker搭建RabbitMQ集群架构
文章目录RabbitMQ的集群模式普通模式镜像模式实现普通模式集群启动容器配置docker自定义网络连接容器实现镜像模式集群设置策略搭建RabbitMQ集群可以在一台RabbitMQ宕机时让另一台继续工作,同时可以添加更多节点来扩展消息通信的吞吐量。本期我们就来搭建RabbitMQ集群。RabbitMQ的集群模式普通模式RabbitMQ的普通模式支持交换机、队列结构等同步,但不支持队列中消息体的同步。这也意味着,如果主机宕机,从机中并不会存有消息体的内容。这种模式下,从机事实上不能在主机宕机时代原创 2020-07-19 19:47:13 · 383 阅读 · 0 评论 -
【RabbitMQ自学笔记三】Spring Boot整合RabbitMQ
文章目录配置RabbitMQ整合5种模型Hello World模型PublisherConsumerWork工作模型发布 / 订阅模型PublisherConsumer路由(直连)模型PublisherConsumer主题(通配符)模式PublisherConsumer本文将使用Spring Boot完成上一期RabbitMQ5种模型的整合。配置RabbitMQ使用Idea快速构建一个Spring Boot项目,选择Web和Spring for RabbitMQ依赖:接下来配置applicatio原创 2020-07-19 16:33:16 · 722 阅读 · 0 评论 -
【RabbitMQ自学笔记二】RabbitMQ的五种交换机模式
文章目录RabbitMQ的五种交换机模式工作模式发布订阅模式路由模式主题模式Java实现五种模式前期准备发布订阅模式Publisher声明交换机方法绑定队列和交换机方法Consumer路由模式PublisherConsumer主题模式PublisherConsumer上一期的Hello World模型是RabbitMQ最简单的工作模式,这一期我们将继续深入,了解RabbitMQ更为复杂的工作模式。RabbitMQ的五种交换机模式RabbitMQ共有简单模式(simple)、工作模式(work)、发布原创 2020-07-18 21:13:46 · 739 阅读 · 0 评论 -
【RabbitMQ自学笔记一】什么是MQ?RabbitMQ的安装与Hello World
文章目录什么是MQ?MQ的作用主要的MQ产品与对比了解AMQP协议安装与运行RabbitMQHello World!最简单的模型Java实现Hello World前期准备导入依赖Publisher类声明队列方法发布消息方法Consumer类`DefaultConsumer`类接收消息方法MQ(Message Queue)消息队列,是基础数据结构中“先进先出”的一种数据结构。一般用来解决应用解耦,异步消息,流量削锋等问题,实现高性能,高可用,可伸缩和最终一致性架构。—— 摘自百度百科什么是MQ?原创 2020-07-18 19:27:54 · 483 阅读 · 0 评论 -
【Spring Data JPA自学笔记五】一对多、多对多和级联
文章目录数据库表的关系一对多多对多Spring Data JPA实现一对多基本配置实现一对多放弃维护权Spring Data JPA实现多对多基本配置实现多对多级联之前的所有操作都是在单表查询的前提下,这一期我们要了解Spring Data JPA多表查询的各种配置。数据库表的关系数据库表之间的关系可以分为一对一,一对多和多对多,其中一对一可以视为一对多的一种特殊情况。一对多所谓一对多关系,即第一个表中的单个行可以与第二个表中的一个或多个行相关,但第二个表中的一个行只可以与第一个表中的一个行相关原创 2020-07-17 20:38:03 · 436 阅读 · 0 评论 -
【Spring Data JPA自学笔记四】动态查询
文章目录JpaSpecificationExecutor接口初见Specification类Specification的更多功能Specification的条件Specification多条件查询排序和分页使用Sort使用PageRequest上一期介绍了Spring Data JPA的各种查询方法,这一期来详细讲一下动态查询类,JpaSpecificationExecutor.JpaSpecificationExecutor接口JpaSpecificationExecutor提供了findOne、原创 2020-07-17 16:16:04 · 449 阅读 · 0 评论 -
【Spring Data JPA自学笔记三】Spring Data JPA的基础和高级查询方法
文章目录调用接口的基础方法查询RepositoryCrudRepositoryPagingAndSortingRepositoryJPARepositoryJpaSpecificationExecutorJPQL查询什么是JPQL使用JPQL使用有参的JPQL修改数据库SQL查询上一期我们初识了Spring Data JPA,完成了基本配置和简单查询。今天我们将深入了解Spring Data JPA提供的一些复杂查询方法。调用接口的基础方法查询上一期我们使用接口提供的findAll方法进行基本查询,原创 2020-07-16 23:26:58 · 1069 阅读 · 0 评论 -
【Spring Data JPA自学笔记二】初识Spring Data JPA
文章目录Spring Data JPA是什么?Spring Data JPA的配置配置pom.xml配置applicationContext.xmlSpring Data JPA的使用Spring Data JPA的运行原理Spring Data JPA是Spring数据家族的一部分,它使得实现基于JPA访问数据库变得很容易。它增强了对JPA的支持,使得构建使用数据访问技术的spring驱动的应用程序变得更加容易。Spring Data JPA是什么?上一期我们讲过了JDBC和原生JPA,而JP原创 2020-07-16 18:56:21 · 295 阅读 · 0 评论 -
【Spring Data JPA自学笔记一】JPA是什么?JPA访问数据库初体验
文章目录JPA是什么?JDBC的诞生JPA的诞生如何使用JPA?配置JPA配置pom.xml配置persistence.xml实现POJO类调用JPA方法关于EntityManagerJPA是Java Persistence API的简称,中文名Java持久层API,是JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中。Sun引入新的JPA ORM规范出于两个原因:其一,简化现有Java EE和Java SE应用开发工作;其二,Sun希望整合ORM技术,实现天下原创 2020-07-15 17:37:45 · 192 阅读 · 0 评论 -
对比jQuery与vue+axios,两者发送ajax请求的方法和不同
文章目录post请求准备控制器准备html实现ajax请求vue+axios版ajaxjQuery版ajax发送参数的不同接收参数的不同get请求get和post的差别jQuery与axios的data在发送get请求时的不同axios的get请求方式总结axios和jQuery的ajax本质上都是对原生XHR的封装,不过axios符合最新的ES规范。因此,在用vue编写js时,使用axios而...原创 2020-05-07 13:23:01 · 1299 阅读 · 0 评论 -
【Spring Boot自学笔记四】整合MyBatis+Druid+使用MyBatis Generator+动态扫描开发
文章目录添加配置配置pom.xml解决生成后mapper.xml丢失问题配置application.properties配置mybatis-config.xml配置generatorConfig.xml添加连接池配置类MBG逆向工程生成代码解决逆向生成xxxKey和xxxwithBlobs的问题使用MBG生成的代码访问数据库扫描mapper接口扫描mapper.xml实现访问数据库的控制器实现访问...原创 2020-05-06 18:51:15 · 599 阅读 · 0 评论 -
【Spring Boot自学笔记三】登录与拦截器
文章目录登录实现登录控制器指定html中的``标签登录失败提示为控制器添加参数拦截器通过控制器设置session属性实现拦截器类把拦截器加入组件中若要查看完整的登录和拦截器代码请直接下翻。登录登录很简单,用一个控制器类,匹配传入的参数是否与数据库中的用户信息匹配,如果匹配就跳转到后台,不匹配就返回主页。这里笔者简单的使用模拟数据来提供一个用户。spring boot会自动根据控制器方法...原创 2020-05-06 12:30:43 · 438 阅读 · 0 评论 -
【Spring Boot自学笔记二】国际化
所谓国际化,即让页面自动根据不同的国家地区显示对应的语言,好处不必多说。Spring boot为我们实现国际化提供了非常方便的方法,我们不再需要自行配置xml,这些配置spring boot已经帮我们自动实现。前期准备实现登录界面我们先来绘制一个简单的登录页面:笔者使用bootstrap4做了一些美化,具体美化方法不是重点,本文不再提。<!DOCTYPE html>&l...原创 2020-05-05 15:19:26 · 228 阅读 · 0 评论 -
【Spring Boot自学笔记一】项目搭建+Hello World+主页配置
文章目录关于Spring Boot创建Spring BootHello World!关于Spring BootSpring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。创建Spring Boot比起创建一个SSM框架的项目,Spring Boot项目的创...原创 2020-05-05 00:11:29 · 338 阅读 · 0 评论 -
【Maven配置四】配置Spring+整合MyBatis实现动态扫描开发
文章目录动态扫描过程图配置xml配置pom.xml配置ApplicationContext.xml提供bean和mapper实现访问数据库Spring框架是一个开放源代码的J2EE应用程序框架,它使得我们的开发过程更简单,可以大大减少工作量,提高效率。spring具有轻量化、ioc(控制反转)、aop(面向切面编程)思想、mvc模式等特性,在企业中被广泛使用。今天我们使用Maven完成spri...原创 2020-05-02 14:51:01 · 487 阅读 · 0 评论 -
jQuery实现静态html+ajax请求访问MySQL数据库并显示
文章目录静态html+ajax与jspajax访问流程图前期准备配置jQuery准备index.html准备dao准备servletjQuery实现ajax附:关于Maven项目引入js无法使用的问题静态html+ajax与jsp为什么要使用ajax请求,而不用jsp的el表达式和jstl方便的得到数据呢?优点一: 前后端分离jsp是一种早期的技术,它将前后端杂糅在一起,html和jav...原创 2020-05-01 21:00:09 · 9484 阅读 · 0 评论 -
【Maven配置三】Maven Web项目配置MyBatis Generator插件自动生成代码+访问MySQL数据库
文章目录配置xml配置pom.xml配置GeneratorConfig.xml配置命令行使用生成的代码访问Mysql修改mybatis-config.xml实现servlet解决找不到映射的错误附:关于MBG生成代码重复的问题我们知道MyBatis的框架为我们操作数据库大大减小了工作量,然而实现类和mapper映射仍然需要我们自己编写。MyBatis Generator为我们很好的解决了这个问...原创 2020-04-30 15:52:40 · 348 阅读 · 0 评论 -
【Maven配置二】Maven Web项目配置MyBatis框架并读取MySQL数据库
文章目录提供数据库文件配置xml文件配置pom.xml配置mybatis-config.xml配置mapper提供实体类实现读取方法显示结果上一期中我们用intellij idea完成了Maven项目的配置,内嵌jetty插件构建服务器,并安装了jstl标签库。我们知道可以使用jdbc对数据库进行增删改查,但是这样代码量很大,而且是硬编码,不够灵活多变,效率也不高。MyBatis为我们提供了更...原创 2020-04-29 19:03:21 · 508 阅读 · 0 评论 -
【Maven配置一】intellij idea从零开始用maven创建web工程+配置jetty插件+引入jar包
文章目录创建项目新建项目项目命名配置Maven配置Tomcat(使用本地文件)引入jar包使用jetty插件搭建服务器关于Tomcat和Jetty添加plugin项配置命令行案例:引入jstl包添加dependency项启用el表达式Maven项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的项目管理工具软件。通过使用Maven,我们可以便捷的使用一段代码来引入jar...原创 2020-04-28 16:34:51 · 891 阅读 · 0 评论 -
【解决方案】NoClassDefFound: "Could not initialize com.mchange.v2.c3p0.ComboPooledDataSource"
昨天笔者在学习servlet,尝试jsp与MySQL的交互,我写了这样一个servlet访问本地的MySQL数据库:package Dao;import Model.User;import com.mchange.v2.c3p0.ComboPooledDataSource;import javax.servlet.ServletException;import javax.servl...原创 2020-04-27 13:37:49 · 933 阅读 · 0 评论 -
【jdbc编程】使用c3p0连接池对MySQL数据库进行访问
连接池是创建和管理一个连接的缓冲池的技术,这些连接准备好被任何需要它们的线程使用。即如果有大量用户访问数据库,连接池便可以为每个用户提供连接,用户访问完之后收回连接以备再次使用。连接池可以极大的改善用户的 Java 应用程序的性能,同时减少全部资源的使用。在这里我选择用c3p0作为连接池。c3p0可以以下链接进行下载:c3p0下载package hellomysql;import com...原创 2020-04-21 15:24:16 · 345 阅读 · 0 评论