1、问题描述
在使用Spring Security的过程中,涉及到登录时密码验证问题,以及更改密码时验证原密码问题。
2、解决办法
在这两种情况下想要判断输入密码与数据库中密码(已加密)是否相同,需要使用它自带的比较方法。
源码如下
BCryptPasswordEncoder 类 中的matches方法
3、使用方法
代码如下:(点击图片可放大)
matches(CharSequence rawPassword, String encodedPassword) 方法中前一个参数为前端传来的值(例如123),后一个为数据库中需要对比的值(已加密存入数据库的密码)
——————————————分割线—— 补充 ————————————————
BCryptPasswordEncoder 类
BCRYPT_PATTERN是Pattern类的一个实例
Pattern类在java.util.regex包中;此包中主要有两个类:Pattern、Matcher。
Pattern 类
声明:public final class Pattern implements java.io.Serializable
含义:模式类,正则表达式的编译表示形式。
注意:此类的实例是不可变的,可供多个并发线程安全使用。
Matcher 类
Matcher 类中的matches方法:
boolean matches() 最常用方法:尝试对整个目标字符展开匹配检测,也就是只有整个目标字符串完全匹配时才返回真值.
Pattern和Matcher具体的用法
//判断是否是数字.括号里可填其他正则表达式; Pattern p = Pattern.compile("\\d+"); //需要要判断的字符串; Matcher m = p.matcher("1234567"); if(m.matches()) { System.out.println("正确,是由数字组成的"); }else { System.out.println("错误,不是由数字组成的"); }