第一章:SpringSecurity入门
功能
身份认证(authentication)
身份认证是验证谁正在访问系统资源 ,判断用户是否为合法用户。认证用户的常见方式是要求用户输入用户名和密码。
授权(authorization)
用户进行身份认证后,系统会控制谁能访问哪些资源,这个过程叫做授权。用户无法访问没有权限的资源。
防御常见攻击(protection against common attacks)
CSRF
HTTP Headers
HTTP Requests
案例-身份认证
创建项目引入依赖
pom文件依赖
1234567891011121314151617181920212223242526272829303132333435<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>3 ...
问题
今天在工作的时候遇到一个问题,在项目接入的MagicApi模块中添加一个接口在,创建数据源的时候自动创建两个查询接口一个是带分页的一个是不带分页的。
当时这个方法创建这两个接口会给他分配一个分组,如果该分组不存在,则magicApi中也不会有这两个接口,但是源码中写的是死分组ID,并且是UUID类型的,无法确定是那一个分组
找到创建接口的函数,发现调用了一个工具类来创建,接口,当时的想法是直接在工具类中,实现一个方法,将默认分组名和分组路径写入到SpringBoot的配置文件中,这也方便修改。
我当时想直接在工具类中创建这样一个方法,但是工具类没有使用SpringBoot的组件注解,所以我才用了new一个Springboot中的Service层对象来实现该方法,该Service层实现了Mybatis-Plus的一系列接口。
在使用数据库查询语句的时候,发现,lambdaQueryMapper写的一点问题没有,但是使用mybatis-Plus中的list方法的时候缺报空指针异常,百思不得其解。
分析
查阅得知
使用new关键字创建的对象是一个普通的Java对象,不会获得Spr ...
问题
在工作中遇到一个函数执行周期非常长,可以采用多线程来解决,优化处理速度
问题:需要判断多个服务是否在线,返回服务在线状态
解决
刚开始想到的是采用多线程来解决此问题
1234567891011121314151617181920public List<Data> SetStatus(List<Data> datas) { // 创建线程池 ExecutorService executorService = Executors.newFixedThreadPool(10); for (Data data : datas){ // 创建线程 Runnable runnable = new Runnable() { @Override public void run() { // 执行需要耗时的函数 setStatus(data) } ...
在学习redis的时候,每次启动redis都会报错
WARNNG Memory overcommit must be enabled! Without it. a backaround save or replication may fail under low memory
conditon. Being disabled, it can also cause failures without ow memory condition. see https://github.com/jemaloc/jemalloc/issues/1328. To fix this issue add vm.overcommit_memory = 1’ to /etc/sysctl.conf and then reboot or run the command ‘sysct
vm.overcommit_memory=1’ for this to take effect
问题说的很明显,内存不够,需要在/etc/sysctl.conf文件夹下添加一行代码,该文件为只读文件,需要使用管理员身份来修改
先 ...
Redis7入门概述
作者:antirez Github
博客
Remote Dictionary Server(远程字典服务)是完全开源的,使用ANSIC语言编写遵守BSD协议,是一个高性能的Key-Value数据库提供了丰富的数据结构,例如String、Hash、List、Set、SortedSet等等。数据是存在内存中的,同时Redis支持事务、持久化、LUA脚本、发布/订阅、缓存淘汰、流技术等多种功能特性提供了主从模式、Redis Sentinel和Redis Cluster集群架构方案
Redis是一种缓存技术
分布式缓存,挡在mysql数据库之前的带刀护卫
内存存储和持久化(RDB+AOF), redis支持异步将内存中的数据写到硬盘上,同时不影响继续服务
高可用架构搭配
缓存穿透、击穿、雪崩
分布式锁
队列
排行版+点赞
…
数据库遵循 2(写)- 8(读)原则,为了让这两个保持平衡,我们使用redis缓存,将8(读)进行降低。
与传统数据库关系(mysql)
Redis是key-value数据库(NoSQL一种),mysql是关系数据库
Redis数据操 ...
版本适配
可通过查阅官方文件,可得springCloud适配的SpringBoot和JAVA的版本,建议通过GitHub对应的官方文档来查阅
SpringCloud作用
是将一系列微服务操作整合到一起
服务网关:Vue前台页面不应该直接知道后台服务器的真实地址,所以需要通过服务网关来实现
负载均衡:后台服务器不可能只有一个,需要对多个服务器进行调用,通过负载均衡来实现
分布式事务:后台数据库也不可能只有一个,为了能够实现各个数据库之间的数据一致,通过分布式事务来实现
服务熔断:当后台有服务器失效的时候,需要通过服务熔断来进行服务降级监控
SpringCloud就是将上述功能进行整合
如果有一些老项目还是需要使用一些不流行的框架
Base工程模块构建
构建父工程Maven
设置编码:设置 - 编译器 - 文件编码 - 全部UTF-8
设置注解生效:设置 - 构建执行部署 - 编译器 - 注解处理器 - 勾上启用注解
设置JDK版本:设置 - 构建执行部署 - 编译器 - JAVA编译器 - 设置目标字节码版本为17
设置忽略文件类型:设置 - 编辑器 - 文件类型 - ...
项目报错:Handler dispatch failed; nested exception is java.lang.NoClassDefFoundError: javax/xml/bind/…
原因:缺少jaxb-api包导致的,在Java 8以及以前的版本,是默认包含jaxb这个jar包的;但是在java SE 9.0就不再包含着个包了,如果使用则需要手动引进。
导入如下包
1234567891011121314151617181920<dependency> <groupId>javax.xml.bind</groupId> <artifactId>jaxb-api</artifactId> <version>2.3.0</version></dependency><dependency> <groupId>com.sun.xml.bind</groupId> <artifactId>jaxb-impl</artifactId&g ...