功能需求 —— [ 找回或重置密码 ]。
功能设计
所有需要登录的网站,都会提供”找回密码”的功能,防止用户忘记密码。
👆←🗎[1]
如何保存密码
相关项目经验
项目列表
【个人项目-叮叮】DingDing/Security.java at master · SuiteLHY/DingDing
相关代码(截选) 👆1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126package github.com.suitelhy.dingding.security.service.api.domain.vo;
import github.com.suitelhy.dingding.core.infrastructure.config.springdata.attribute.converter.VoAttributeConverter;
import github.com.suitelhy.dingding.core.infrastructure.domain.model.VoModel;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;
// ……(此处省略若干代码)
/**
* 加密策略
*
* @Description 密码加密策略.
*/
enum PasswordEncoderVo
implements VoModel<PasswordEncoderVo, Integer, String> {
BCrypt(1
, "BCryptPasswordEncoder"
, "BCrypt 加密策略。"
, new BCryptPasswordEncoder()
, "\\A\\$2(a|y|b)?\\$(\\d\\d)\\$[./0-9A-Za-z]{53}");
/**
* 为持久化类型转换器提供支持
*/
true) .persistence.Converter(autoApply =
public static class Converter
extends VoAttributeConverter<PasswordEncoderVo, Integer, String> {
/**
* @Design (单例模式 - 登记式)
*/
private static class Factory {
private static final Converter SINGLETON = new Converter();
}
private Converter() {
super(PasswordEncoderVo.class);
}
public static Converter getInstance() {
return Factory.SINGLETON;
}
}
public final Integer code;
public final String name;
public final String description;
public final PasswordEncoder encoder;
/**
* 正则表达式模板
*/
public final String RegexPattern;
/**
* (Constructor)
*
* @param code
* @param name
* @param description
* @param encoder
* @param RegexPattern
*/
PasswordEncoderVo( Integer code, String name, String description
, PasswordEncoder encoder, String RegexPattern)
{
this.code = code;
this.name = name;
this.description = description;
this.encoder = encoder;
this.RegexPattern = RegexPattern;
}
/**
* VO 的值
*
* @Description Unique attribute.
*
* @return {@link this#code}
*/
public Integer value() {
return this.code;
}
/**
* 详细信息
*
* @return {@link this#description}
*/
public String description() {
return this.description;
}
/**
* VO 的 (展示)名称
*
* @return {@link this#name}
*/
public String displayName() {
return this.name;
}
/**
* 等效比较
*
* @Description 备注: <method>equals(Object)</method>
*
* @param value {@link this#equalsValue(Number)}
*
* @return 判断结果
*
* @see this#equalsValue(Number)
*/
public boolean equals( Integer value){
return equalsValue(value);
}
public String toString() {
return VoModel.toString(this);
}
/**
* 提供类型转换器
*
* @Design 为持久化类型转换功能提供支持.
*
* @return {@link Converter}
*/
public Converter voAttributeConverter() {
return Converter.getInstance();
}
}
密码重置
用户名还是邮件地址?
过滤用户
功能实现
📖参看
主要参看📖
主要参看📖(站内资源)
分类:解决问题✅
分类:工具🧰 | 查阅🔍
- calc() - CSS(层叠样式表) | MDN
- fit-content() - CSS(层叠样式表) | MDN
- 【★】【GFM】GitHub Flavored Markdown Spec - github.github.com
- HTML Color Picker
- HTML中      等6种空白空格的区别_电脑小技巧_上网技巧_QQ地带
- Markdown 教程 | 菜鸟教程
- 👆 - 白色指向反手指数 表情符号: U+1F446 - Unicode 字符百科
- 📖 - 打开书 表情符号: U+1F4D6 - Unicode 字符百科
- 🔗 - 链接符号 表情符号: U+1F517 - Unicode 字符百科
- 🖇 - 链接回形针 表情符号: U+1F587 - Unicode 字符百科
- 🗎 - 文献: U+1F5CE - Unicode 字符百科
- ※ - 参考标志: U+203B - Unicode 字符百科
- ☌ - 关联: U+260C - Unicode 字符百科
- 🡅 - 向上重箭头: U+1F845 - Unicode 字符百科
- 🡆 - 向右重箭头: U+1F846 - Unicode 字符百科
- 🡇 - 向下重箭头: U+1F847 - Unicode 字符百科
- 🡄 - 向左重箭: U+1F844 - Unicode 字符百科
- ⤴ - 指向右侧然后向上弯曲的箭头 表情符号: U+2934 - Unicode 字符百科
- ⤵ - 指向右侧然后向下弯曲的箭头 表情符号: U+2935 cudarrr - Unicode 字符百科
- ⤶ - 指向下侧然后向左弯曲的箭头: U+2936 ldca - Unicode 字符百科
- ⤷ - 指向下侧然后向右弯曲的箭头: U+2937 rdca - Unicode 字符百科
- 🎵 - 快乐的音符 表情符号: U+1F3B5 - Unicode 字符百科
- ⇔ - 左右双箭头: U+21D4 hArr - Unicode 字符百科
- ⇒ - 向右双箭头: U+21D2 rArr - Unicode 字符百科
- — - Em 长划: U+2014 mdash - Unicode 字符百科
- 👍 - 竖起大拇指 表情符号: U+1F44D - Unicode 字符百科
- 标点符号 - 维基百科,自由的百科全书
- 连接号 - 维基百科,自由的百科全书
分类:其他(二度及以上关联☌)