spring boot集成Elasticsearch-SpringBoot(25)
# 1. Elasticsearch—搜索应用服务器 1.1 什么是搜索引擎 搜索引擎(search engine )通常意义上是指:根据特定策略,运用特定的爬虫程序从互联网上搜集信息,然后对信息进行处理后,为用户提供检索服务,将检索到的相关信息展示给用户的系统。 而我们讲解的是捜索的索引和检索,不涉及爬虫程序的内容爬取。大部分公司的业务也不会有爬取工作,而只提供查询服务,而且Elasticsearch也只是提供这方面的功能。 1.2 认识 Elasticsearch Elasticsearch是一个分布式、RESTful风格的搜索和数据分析引撃。通过它,能够执行及合并多种类型的搜索(结构化数据、非结构化数据、地理位置、指标),解决不新涌现出的各种需求。 Elasticsearch使用的是标准的RESTful风格的API,使用JSON提供多种语言(Java、 Python、.Net、SQL和PHP)的支持,它可以快速地存储、搜索和分析海量数据。 Elasticsearch是用Java语言开发的,并使用Lucene作为其核心来实现所有索引和搜索的功能。它的目的是 ...
spring boot集成RabbitMQ-SpringBoot(24)
1. 认识RabbitMQ1.1介绍RabbitMQRabbitMQ 是开源的高级消息队列协议(Advanced Message Queueing Protocol, AMQP) 的实现,用Erlang 语言编写,支持多种客户端。 RabbitMQ是目前应用相当广泛的消息中间件(其他同类的消息处理中间件有ActiveMQ、Kafka等)。在企业级应用、微服务应用中,RabbitMQ担当着十分重要的角色。例如,在业务服务模块中解耦、异步通信、高并发限流、超时业务、数据延迟处理等都可以使用RabbitMQ。 RabbitMQ的处理流程如图12-1所示 图 12-1 1.2 使用场景(1)推送通知 “发布/订阅”是RabbitMQ的重要功能。可以用”发布/订阅”功能来实现通知功能。消费者 (consumer) 一直监听RabbitMQ的数据。如果RabbitMQ有数据,则消费者会按照“先进先岀” 规则逐条进行消费。而生产者(producer)只需要将数据存入RabbitMQ。这样既降低了不同系统之间的耦合度,也确保了消息通知的及时性,且不影响系统的性能。 ...
用redis和jpa实现缓存文章和点击量-SpringBoot(23)
实现流程 1. 实现缓存文章1.1 实体类package com.intehel.demo.domain;import lombok.AllArgsConstructor;import lombok.Data;import lombok.NoArgsConstructor;import java.io.Serializable;@Data@NoArgsConstructor@AllArgsConstructorpublic class Article implements Serializable { private Integer id; private Integer num;} 1.2 数据库持久层package com.intehel.demo.mapper;import com.intehel.demo.domain.Article;import org.apache.ibatis.annotations.*;import org.springframework.stereotype.Repository;@Repository@Mapper ...
springboot整合redis-SpringBoot(22)
1. 在 Spring Boot 中集成 Redis(1)完成配置基础项。添加 Redis、MySQL、MyBatis 依赖。 (2)配置MySQL、Redis服务器可以直接在application.yml文件中逬行配置,具体配置方法见以下代码: spring: redis: host: 127.0.0.1 port: 6379 jedis: pool: max-active: 8 max-wait: -1 max-idle: 8 min-idle: 0 timeout: 5000 datasource: druid: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/springboot?useUnicode=true&characterEncoding=utf-8&serverTimezone=UTC&useSSL=true u ...
redis-SpringBoot(21)
Redis是大规模互联网应用常用的内存高速缓存数据库,它的读写速度非常快,据官方 Bench-mark的数据,它读的速度能到11万次/秒,写的速度是8.1万次/秒。 1. 认识Spring Cache在很多应用场景中通常是获取前后相同或更新不频繁的数据,比如访问产品信息数据、网页数据。如果没有使用缓存,则访问每次需要重复请求数据库,这会导致大部分时间都耗费在数据库查询和方法调用上,因为数据库进行I/O操作非常耗费时间,这时就可以利用Spring Cache来解决。 Spring Cache是Spring提供的一整套缓存解决方案。它本身并不提供缓存实现,而是提供统 一的接口和代码规范、配置、注解等,以便整合各种Cache方案,使用户不用关心Cache的细节。 Spring支持“透明”地向应用程序添加缓存,将缓存应用于方法,在方法执行前检查缓存中是否有可用的数据。这样可以减少方法执行的次数,同时提高响应的速度。缓存的应用方式“透明”, 不会对调用者造成任何干扰。只要通过注解@EnableCaching启用了缓存支持,Spring Boot就会自动处 ...
shiro认证- SpringBoot(20)
1.认识shiro除Spring Security安全框架外,应用非常广泛的就是Apache的强大又灵活的开源安全框架 Shiro,在国内使用量远远超过Spring Security。它能够用于身份验证、授权、加密和会话管理, 有易于理解的API,可以快速、轻松地构建任何应用程序。而且大部分人觉得从Shiro入门要比 Spring Security 简单。 1.1 认识Shiro的核心组件Shiro有如下核心组件。 Subject:代表当前“用户”。与当前应用程序交互的任何东西都是Subject,如爬虫、机器人、所有Subject都绑定到SecurityManager,与Subject的所有交互都会委托给 SecurityManager,Subject 是一个门面,SecurityManager 是实际的执行者。 SecurityManager:与安全有关的操作都会与SecurityManager交互。它管理着所有 Subject,是Shiro的核心,员责与其他组件进行交互。 Realm: Shiro从Realm中获取安全数据(用户、角色、权限),SecurityManager 需要 ...
JWT- SpringBoot(19)
在生产环境中,对发在的API增加授权保护是非常必要的。JWT作为一个无状态的授权校捡技术,非常适合于分布式系统架构。服务器端不需要保存用户状态,因此,无须采用Redis等技术来实现各个服务节点之间共享Session数据。 本节通过实例讲解如何用JWT技术进行授权认证和保护。 1.1 配置安全类(1)自定义用户查看代码 package com.intehel.jwt.domain;import lombok.Data;import org.springframework.security.core.GrantedAuthority;import org.springframework.security.core.authority.SimpleGrantedAuthority;import org.springframework.security.core.userdetails.UserDetails;import javax.persistence.*;import java.util.ArrayList;import java.util.Collection;import ...
Spring Security静态资源过滤(11)
在一个实际项目中,并非所有的请求都需要经过Spring Security过滤器,有一些特殊的请求,例如静态资源等,一般来说并不需要经过Spring Security过滤器链,用户如果访问这些静态资源,直接返回对应的资源即可。 回顾关于WebSecurity的讲解,提到它里边维护了一个ignoredRequests变量, 该变量,记录的就是所有需要被忽略的请求,这些被忽略的请求将不再经过Spring Security过滤器。例如,静态资源目录结构如图4-10所示。 图 4-10 现在这些静态资源的访问不需要经过Spring Security过滤器,具体配置方案如下: public class SecurityConfig extends WebSecurityConfigurerAdapter{ @Override public void configure(WebSecurity web) throws Exception { web.ignoring().antMatchers("/mylo ...
Spring Security定义多个过滤器链(10)
在Spring Security中可以同时存在多个过滤器链,一个WebSecurityConfigurerAdapter的实例就可以配置一条过滤器链。 我们来看如下一个案例: @Configurationpublic class SecurityConfig { @Bean UserDetailsService us(){ InMemoryUserDetailsManager users = new InMemoryUserDetailsManager(); users.createUser(User.withUsername("剑气近").password("{noop}123").roles("admin").build()); return users; } @Configuration @Order(1) static class SecurityConfig01 extends We ...
ObjectPostProcessor使用与多种用户定义方式(9)
1.ObjectPostProcessor 使用 前面介绍了 ObjectPostProcessor的基本概念。相信读者已经明白,所有的过滤器都由对应的配置类来负责创建,配置类在将过滤器创建成功之后,会调用父类的postProcess方法,该 方法最终会调用到CompositeObjectPostProcessor对象的postProcess方法,在该方法中,会遍 历 CompositeObjectPostProcessor 对象所维护的 List 集合中存储的所有 ObjectPostProcessor 对 象,并调用其postProcess方法对对象进行后置处理。默认情况下,CompositeObjectPostProcessor 对象中所维护的List集合中只有一个对象那就是AutowireBeanFactoryObjectPostProcessor调用 AutowireBeanFactoryObjectPostProcessor 的 postProcess 方法可以将对象注册到 Spring 容器 中去。 升发者可以自定义ObjectPostProcessor对象,并添加 ...
Spring Security过滤器链分析-初始化流程(8)
过滤器链分析 提起Spring Security的实现原理,很多读者都会想到过滤器链。因为Spring Security中的所有功能都是通过过滤器来实现的,这些过滤器组成一个完整的过滤器链。那么,这些过滤器 链是如何初始化的?我们前面反复提到的AuthenticationManager又是如何初始化的?通过前面章节的学习,相信读者己经有了一些认识,本章我们将从头开始,分析Spring Security的初始化流程,同时再通过六个案例来让读者深入理解并且学会如何制作过滤器链。由于初始化流程相对复杂,因此我们没有选择在一开始就讲解Spring Security初始化流程,而是放到本节。当读者对于Spring Security有一个基本的认知之后再来讲解,此时相对来说就会比较容易理解。 本章涉及的主要知识点有: 初始化流程分析。 ObjectPostProcessor 的使用。 多种用户定义方式。 定义多个过滤器链。 静态资源过滤。 使用JSON格式登录。 添加登录验证码。 1. 初始化流程分析 Spring Security初始化流程整体上来说理解起来并不难,但是这里涉及许多零碎的 ...
Spring Security配置多个数据源并添加登录验证码(7)
1.配置多个数据源 多个数据源是指在同一个系统中,用户数据来自不同的表,在认证时,如果第一张表没有查找到用户,那就去第二张表中査询,依次类推。 看了前面的分析,要实现这个需求就很容易了,认证要经过AuthenticationProvider,每一 个 AuthenticationProvider 中都配置了一个 UserDetailsService,而不同的 UserDetailsService 则可以代表不同的数据源,所以我们只需要手动配置多个AuthenticationProvider,并为不同的 AuthenticationProvider 提供不同的 UserDetailsService 即可。 为了方便起见,这里通过 InMemoryUserDetailsManager 来提供 UserDetailsService 实例, 在实际开发中,只需要将UserDetailsService换成自定义的即可,具体配置如下: @Configurationpublic class SecurityConfig extends WebSecurityConfigurerAdapte ...















