Evaluate项目开发日志
黑马点评项目的学习日志项目需要实现的功能介绍
项目架构
前端登录 ,使用nginx启动前端项目 ,然后访问8080端口,必须是在后端项目启动的情况下
数据转换Bean --- > String : Bean.toString()
String ----> Bean : Shop shop = JSONUtil.toBean(shopJson, Shop.class);
Bean ---->hashMap : Map<String, Object> map1 = BeanUtil.beanToMap(userDTO);
hash ---->Bean : UserDTO userDTO1 = BeanUtil.mapToBean(map, UserDTO.class, true);
2023.2.18—–短信登录
基于session实现发送验证码登录
流程图的分析发送短信验证码
接口:@PostMapping("/user/code")
1234public Result sendCode(@RequestPa ...
Redis的java客户端
Jedis快速入门
引入依赖
12<groupId>redis.chlients</groupId><artifactId>jedis</xxx>
建立连接
123456void setUp(){ jedis = new Jedis("IP地址" ,6379); jedsi.auth("密码"); jedis.select("1"); //选择数据库 }
操作数据,测试String
123456void testString(){ String result = jedis.set("name","张三"); sout Sitrng name = jedis.get("name"); sout}
关闭连接
12345void tearDown(){ if(jedis != null){ je ...
Redis基础学习
Redis学习Redis数据结构介绍特点
事务的差异(BASE): 只能满足基本的事务,也有可能无法满足
存储差异: 存储的是内存中,扩展类型是水平
使用场景 : 【数据结构统一,对一致性、安全性要求不高、对性能要求过高】
单线程 ,每个命令具有原子性
低延迟,速度快
支持数据的持久化
支持主从集群,分片集群 , 支持多语言客户端
基于C语言写的
配置相关及其遇到的问题123456789101112131415//说明bind 0.0.0.0requirepass 0000 # 修改的是密码//port 6379 # 默认端口号dir . # 工作目录,默认是当前目录,也就是当我们启动redis时系统所在的目录,所有的日志、持久化等文件都会保存在这个目录中database 1 # 设置数据库数量为1 ,默认为16 ,编号就是0 - 15maxmemory 512mb #默认的redis能够使用的最大内存logfile "redis.log" # 路径在我们执行redis-server的目录下
进入redis安装目录
123cd /usr/local/s ...
Security授权实现
授权重点剖析AccessDecisionManager
AccessDecisionManager (访问决策管理器),用来决定此次访问是否被允许。
AccessDecisionVoter
AccessDecisionVoter (访问决定投票器),投票器会检查用户是否具备应有的角色,进而投出赞成、反对或者弃权票。
AccesDecisionVoter 和 AccessDecisionManager 都有众多的实现类,在 AccessDecisionManager 中会换个遍历 AccessDecisionVoter,进而决定是否允许用户访问,因而 AaccesDecisionVoter 和 AccessDecisionManager 两者的关系类似于 AuthenticationProvider 和 ProviderManager 的关系。
ConfigAttribute
ConfigAttribute,用来保存授权时的角色信息
在 Spring Security 中,用户请求一个资源(通常是一个接口或者一个 Java 方法)需要的角色会被封装成一个 ConfigAtt ...
Security实现密码加密处理
密码加密常见的几种密码加密的方式
BCryptPasswordEncoder
BCryptPasswordEncoder 使用 bcrypt 算法对密码进行加密,为了提高密码的安全性,bcrypt算法故意降低运行速度,以增强密码破解的难度。同时 BCryptP asswordEncoder “为自己带盐”开发者不需要额外维护一个“盐” 字段,使用 BCryptPasswordEncoder 加密后的字符串就已经“带盐”了,即使相同的明文每次生成的加密字符串都不相同。
Argon2PasswordEncoder
Argon2PasswordEncoder 使用 Argon2 算法对密码进行加密,Argon2 曾在 Password Hashing Competition 竞赛中获胜。为了解决在定制硬件上密码容易被破解的问题,Argon2也是故意降低运算速度,同时需要大量内存,以确保系统的安全性。
Pbkdf2PasswordEncoder
Pbkdf2PasswordEncoder 使用 PBKDF2 算法对密码进行加密,和前面几种类似,PBKDF2
算法也是一种故意降低运算速度的算 ...
security实现验证码andRemember-Me
实现验证码导入依赖123456<!--验证码相关的依赖--><dependency> <groupId>com.github.penggle</groupId> <artifactId>kaptcha</artifactId> <version>2.3.2</version></dependency>
定义验证码配置类12345678910111213141516171819202122232425262728package Rememberme.config;import com.google.code.kaptcha.Producer;import com.google.code.kaptcha.impl.DefaultKaptcha;import com.google.code.kaptcha.util.Config;import org.springframework.context.annotation.Bean;import org.sprin ...
自定义配置拦截器
自定义secuirty拦截器背景
很多时候security默认提供的拦截器往往不够用于我们的日常开发,所以我们经常需要自己重写某些拦截器,达到实现开发的需求
本文,以重写登录拦截器为例
相关源码1234567891011121314/*在指定筛选器类的位置添加筛选器。例如,如果希望筛选器 CustomFilter 注册到与 相同的 UsernamePasswordAuthenticationFilter位置,则可以调用: addFilterAt(new CustomFilter(), UsernamePasswordAuthenticationFilter.class) 在同一位置注册多个筛选器意味着它们的排序不是确定的。更具体地说,在同一位置注册多个筛选器不会覆盖现有筛选器。相反,不要注册您不想使用的筛选器。形参:过滤器 – 要注册的过滤器atFilter – 已在 Spring Security 注册(即已知)的另一个 Filter 位置。返回值:用于 HttpSecurity 进一步的定制*/public HttpSecurity addFilterAt(Filt ...
详解SpringSecurity认证
SpringSecurity – 安全认证AuthenticationManager)在spring-security官网中认证是由AuthenticationManager接口来进行负责的,定义为
123public interface AuthenticationManager { Authentication authenticate(Authentication authentication) throws AuthenticationException;}
官方文档解释 :
尝试对传递 Authentication 的对象进行身份验证,如果成功,则返回完全填充 Authentication 的对象(包括授予的权限)。必须 AuthenticationManager 履行以下有关例外情况的合同: 如果帐户被禁用AuthenticationManager,则必须抛出 ,DisabledException并且可以测试此状态。 如果帐户被锁定AuthenticationManager,则必须抛出 aLockedExcepti ...
深入理解Shiro
ShiroShiro介绍 Apache Shiro(发音为“shee-roh”,日语中“城堡”的意思)是一个功能强大且易于使用的 Java 安全框架,可执行身份验证、授权、加密和会话管理,可用于保护任何应用程序 -从命令行应用程序、移动应用程序到最大的 Web 和企业应用程序。
Shiro 提供应用程序安全 API 来执行以下方面(我喜欢将它们称为应用程序安全的 4 个基石):
身份验证 - 证明用户身份,通常称为用户“登录”。
授权-访问控制
密码学 - 保护或隐藏数据免遭窥探
会话管理 - 每个用户的时间敏感状态
Shiro 还支持一些辅助功能,例如 Web 应用程序安全性、单元测试和多线程支持,但这些功能的存在是为了加强上述四个主要问题。
官网QuickStart
Tutorial.java
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757 ...
SpringSecurity的使用
介绍 在web开发中,安全是特别重要的!一般我们实现安全的手段有过滤器、拦截器…
我们使用SpringSecurity、shiro两个框架是为了更加简洁的实现安全。
Spring Security 是一个功能强大且高度可定制的身份验证和访问控制框架。 它是保护基于 Spring 的应用程序的事实标准。
Spring Security 是一个专注于为 Java 应用程序提供身份验证和授权的框架。 与所有 Spring 项目一样,Spring Security 的真正强大之处在于它可以轻松扩展以满足自定义需求
注意点
相关依赖12345678910111213//SpringSecurity配置依赖<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId></dependency> <!--对Thymeleaf添加Spring Securi ...