网站首页 > 技术文章 正文
一.Bcrpty密码加密
常见加密算法:MD5,sha1,sha2
Md5:加密效率非常高,4-6位字符串进行加密加密时间百万分之一秒
Bcrypt:加密效率比较低,4-6位字符串进行加密加密时间需要0.3秒-
需求分析:我们对user用户进行的登陆密码进行加密.
所以我们会用到Bcrpty的密码加密部分.
登陆过程中访问会出现登陆的用户名和密码的页面,这个不是我们所需要的,我们必须放行
步骤:
1、引入springsecurity相关依赖,目的为了适用BcryptPasswordEncoder类 用于加密
2、问题 :默认将用户微服务所有请求拦截
3、解决:提供security配置类将所有请求放行
配置类:
@Component public class SecurityConfig extends WebSecurityConfigurerAdapter{ @Override protected void configure(HttpSecurity http) throws Exception { //super.configure(http); http .authorizeRequests().antMatchers("/**").permitAll()//放行所有的资源 .and() .csrf().disable();/*相当<security:csrf enable=false*/ } }
注意:在启动类中添加@bean
@Bean public BCryptPasswordEncoder bCryptPasswordEncoder(){ return new BCryptPasswordEncoder(); }
管理员登陆密码校验
/** * 用户登录 */ @PostMapping("/login") public Result login(@RequestBody Map<String,String> loginMap){ Admin admin = adminService.findByLoginnameAndPassword(loginMap.get("loginname"), loginMap.get("password")); //判断 if (admin!=null){ return new Result(true,StatusCode.OK,"登陆成功"); }else{ return new Result(false,StatusCode.LOGINERROR,"用户名或者密码错误"); } } /** * 登陆密码校验 */ public Admin findByLoginnameAndPassword(String loginname,String password){ Admin admin = adminDao.findByLoginname(loginname); if (admin!=null&& encode.matches(password,admin.getPassword())){ return admin; }else { return null; } } public interface AdminDao extends JpaRepository<Admin,String>,JpaSpecificationExecutor<Admin>{ public Admin findByLoginname(String loginname); }
用户的登陆和管理员的登陆一样
二.常见的认证机制
1.HTTP Basic Auth
HTTP Basic Auth简单点说明就是每次请求API时都提供用户的username和password,简言之,Basic Auth是配合RESTful API 使用的最简单的认证方式,只需提供用户名密码即可,但由于有把用户名密码暴露给第三方客户端的风险,在生产环境下被使用的越来越少。因此,在开发对外开放的RESTful API时,尽量避免采用HTTP BasicAuth
2. Cookie Auth
3. OAuth
OAuth允许用户提供一个令牌,而不是用户名和密码来访问他们存放在特定服务提供者的数据。每一个令牌授权一个特定的第三方系统(例如,视频编辑网站)在特定的时段(例如,接下来的2小时内)内访问特定的资源(例如仅仅是某一相册中的视频)。这样,OAuth让用户可以授权第三方网站访问他们存储在另外服务提供者的某些特定信息,而非所有内容
4 .Token Auth
使用基于 Token 的身份验证方法,在服务端不需要存储用户的登录记录。大概的流程是
这样的:
1. 客户端使用用户名跟密码请求登录
2. 服务端收到请求,去验证用户名与密码
3. 验证成功后,服务端会签发一个 Token,再把这个 Token 发送给客户端
4. 客户端收到 Token 以后可以把它存储起来,比如放在 Cookie 里
5. 客户端每次向服务端请求资源的时候需要带着服务端签发的 Token
6. 服务端收到请求,然后去验证客户端请求里面带着的 Token,如果验证成功,就向
客户端返回请求的数据
三.基于JWT的Token认证机制
jwt的组成
四.java的JJWT实现JWT
1.创建一个工程,导入依赖jjwt
2.编写测试类
public class CreateToken { /** * 用户登录成功后,服务型根据用户的登陆信息,产生token,可以设置有效期,得到token */ @Test public void createToken(){ String token = Jwts.builder() .signWith(SignatureAlgorithm.HS256, "itcast")//设置头部信息加密算法 .setIssuer("传智播客")//签发者 .setSubject("jack")//面向用户 .setId("123456")//用户的唯一表示 .setIssuedAt(new Date())//签发时间 .setExpiration(new Date(System.currentTimeMillis() + 300000))//有效期 .claim("role", "admin")//自定义信息 .compact();//将信息压缩成jwt System.out.println(token); } /** * 验证用户登录的token是否有效 */ @Test public void parseToken(){ String token = "eyJhbGciOiJIUzI1NiJ9.eyJpc3MiOiLkvKDmmbrmkq3lrqIiLCJzdWIiOiJqYWNrIiwianRpIjoiMTIzNDU2IiwiaWF0IjoxNTUwMDYxODQyLCJleHAiOjE1NTAwNjIxNDIsInJvbGUiOiJhZG1pbiJ9.JFgxMUzSCrUtZ4lxP92IV4tXxPr-eyFJJzms_0kqIcc"; //载荷信息 Claims claims = Jwts.parser() .setSigningKey("itcast") .parseClaimsJws(token).getBody(); System.out.println(claims); } }
五.十次方微服务鉴权
需求分析:是微服务的鉴权,同时能够,通过拦截器的形式来,实现token的鉴别
步骤分析:
1.首先编写jwt的工具类,用于创建token和解析token
2.管理员后台签发token
2.1 配置bean jwtUtil
2.2 修改管理员的登陆方法login
3.删除功能的鉴权
3.1 修改状态码 20003 无权访问 约定前端的契约 Bearer+空格token实现
3.2 删除方法中获得请求头 ,判断请求头是否以Bearer开发
4. 因为每个方法中都要写,所以我们编写一个拦截器,实现重复代码的编写
userController中用户登录:
删除用户的用户:
考虑到因为每个方法中都要写解析token的信息,为了让代码更加清爽,我们定义一个拦截器,统一进行而配置
进行配置拦截器:
修改userController中的方法,我们可以进行测试:
登陆admin进行测试删除用户
admin登陆就可以删除成功
六.发布信息验证Token
相同的操作,我们通过配置拦截器,进行发布信息
1.修改Qaapplication,增添@Bean
2.在而配置文件中增加配置
jwt:
ttl: 7200000
signName: itcast
3.添加拦截器类
4.增加配置类applicationConfig
5.修改add方法
只有user用户能发布文章信息
- 上一篇: 探讨一下,数据库里账号的密码,怎样存放更加安全?
- 下一篇: 数据库里账号的密码,怎样存放更加安全?
猜你喜欢
- 2025-06-18 SQL注入:程序员亲手打开的潘多拉魔盒,如何彻底封印它?
- 2025-06-18 Java项目本地部署宝塔搭建实战Java物业小程序源码物业系统源码
- 2025-06-18 如何安全地保障用户Web登录安全?(web登录安全方案)
- 2025-06-18 如何发个 npm 包?(npm发包流程)
- 2025-06-18 大华信息安全|WEB和Configtool密码重置
- 2025-06-18 某实战项目登录口处的渗透测试(渗透实战测试平台)
- 2025-06-18 Spring Boot 中密码加密的两种姿势
- 2024-10-04 用户名或密码不正确?锁定? 用户名或密码不正确,请重新输入!
- 2024-10-04 通过sql注入获取用户名和密码 192.168.1.1路由器登录入口用户名和密码
- 2024-10-04 常见的密码攻击方式及防范措施 密码攻击是什么
你 发表评论:
欢迎- 533℃Oracle分析函数之Lag和Lead()使用
- 531℃几个Oracle空值处理函数 oracle处理null值的函数
- 529℃Oracle数据库的单、多行函数 oracle执行多个sql语句
- 520℃0497-如何将Kerberos的CDH6.1从Oracle JDK 1.8迁移至OpenJDK 1.8
- 515℃Oracle 12c PDB迁移(一) oracle迁移到oceanbase
- 505℃【数据统计分析】详解Oracle分组函数之CUBE
- 485℃最佳实践 | 提效 47 倍,制造业生产 Oracle 迁移替换
- 483℃Oracle有哪些常见的函数? oracle中常用的函数
- 最近发表
- 标签列表
-
- 前端设计模式 (75)
- 前端性能优化 (51)
- 前端模板 (66)
- 前端跨域 (52)
- 前端缓存 (63)
- 前端react (48)
- 前端aes加密 (58)
- 前端脚手架 (56)
- 前端md5加密 (54)
- 前端富文本编辑器 (47)
- 前端路由 (61)
- 前端数组 (73)
- 前端排序 (47)
- 前端密码加密 (47)
- Oracle RAC (73)
- oracle恢复 (76)
- oracle 删除表 (48)
- oracle 用户名 (74)
- oracle 工具 (55)
- oracle 内存 (50)
- oracle 导出表 (57)
- oracle 中文 (51)
- oracle的函数 (57)
- 前端调试 (52)
- 前端登录页面 (48)
本文暂时没有评论,来添加一个吧(●'◡'●)