• 密码强度和规则


    1. 概述

    在本快速教程中,我们将了解如何在注册期间实现和显示正确的密码约束。像这样的东西 – 密码应该包含一个特殊字符,或者它应该至少 8 个字符长。

    我们希望能够使用强大的密码规则 - 但我们不想手动实际实现这些规则。因此,我们将充分利用成熟的Passay库

    2. 自定义密码约束

    首先,让我们创建一个自定义约束ValidPassword

    1. @Documented
    2. @Constraint(validatedBy = PasswordConstraintValidator.class)
    3. @Target({ TYPE, FIELD, ANNOTATION_TYPE })
    4. @Retention(RUNTIME)
    5. public @interface ValidPassword {
    6. String message() default "Invalid Password";
    7. Class[] groups() default {};
    8. Class[] payload() default {};
    9. }

    并在UserDto中使用它:

    1. @ValidPassword
    2. private String password;

    3. 自定义密码验证器

    现在 - 让我们使用该库创建一些强大的密码规则,而无需实际手动实现其中任何一个。

    我们将创建密码验证器PasswordConstraintValidator,我们将定义密码的规则:

    1. public class PasswordConstraintValidator implements ConstraintValidator {
    2. @Override
    3. public void initialize(ValidPassword arg0) {
    4. }
    5. @Override
    6. public boolean isValid(String password, ConstraintValidatorContext context) {
    7. PasswordValidator validator = new PasswordValidator(Arrays.asList(
    8. new LengthRule(8, 30),
    9. new UppercaseCharacterRule(1),
    10. new DigitCharacterRule(1),
    11. new SpecialCharacterRule(1),
    12. new NumericalSequenceRule(3,false),
    13. new AlphabeticalSequenceRule(3,false),
    14. new QwertySequenceRule(3,false),
    15. new WhitespaceRule()));
    16. RuleResult result = validator.validate(new PasswordData(password));
    17. if (result.isValid()) {
    18. return true;
    19. }
    20. context.disableDefaultConstraintViolation();
    21. context.buildConstraintViolationWithTemplate(
    22. Joiner.on(",").join(validator.getMessages(result)))
    23. .addConstraintViolation();
    24. return false;
    25. }
    26. }

    请注意我们如何在此处创建新的约束冲突并禁用默认约束冲突 - 以防密码无效。

    最后,让我们也将Passay库添加到我们的 pom 中:

    1. <dependency>
    2. <groupId>org.passay</groupId>
    3. <artifactId>passay</artifactId>
    4. <version>1.0</version>
    5. </dependency>

    对于一些历史信息,Passay是古老的vt-passwordJava库的后代。

    4.JS密码表

    现在服务器端已经完成,让我们看一下客户端并使用JavaScript实现一个简单的密码强度”功能

    我们将使用一个简单的jQuery插件 - 用于Twitter Bootstrap的jQuery密码强度计 - 来显示注册中的密码强度.html

    1. <input id="password" name="password" type="password"/>
    2. <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>
    3. <script src="pwstrength.js"></script>
    4. <script type="text/javascript">
    5. $(document).ready(function () {
    6. options = {
    7. common: {minChar:8},
    8. ui: {
    9. showVerdictsInsideProgressBar:true,
    10. showErrors:true,
    11. errorMessages:{
    12. wordLength: '',
    13. wordNotEmail: '',
    14. wordSequences: '',
    15. wordLowercase: '',
    16. wordUppercase: '',
    17. wordOneNumber: '',
    18. wordOneSpecialChar: ''
    19. }
    20. }
    21. };
    22. $('#password').pwstrength(options);
    23. });
    24. </script>

    5. 结论

    就是这样 - 一种简单但非常有用的方法,可以在客户端显示密码的强度并在服务器端强制执行某些密码规则。

    本教程的完整实现可以在github 项目中找到 – 这是一个基于 Eclipse 的项目,因此应该很容易导入和运行。

  • 相关阅读:
    PHP黑魔法之md5绕过
    Polygon zkEVM节点代码解析
    nginx入门
    B024 – STM32温湿度控制体温检测烟雾报警系统
    Studio one 6.5中文直装版最新版,一键安装丨无套路分享丨宿主软件丨机架直播
    【GIT版本控制】--项目管理与工具
    3-1常用排序练习
    物联网AI MicroPython学习之语法 TIMER硬件定时器
    【毕业设计】智能聊天对话机器人 - 深度学习
    chisel入门初步2_2——-1/2次方生成器
  • 原文地址:https://blog.csdn.net/allway2/article/details/127778279