Học viên: Bùi Quang Tiến
Lớp: Java Fullstack 23
Email: buiquangtien2001@gmail.com
Số điện thoại: 0358036100
Nguồn tham khảo: tại đây
1. Khái quát chung
Trong phần hướng dẫn này, chúng ta sẽ xem cách triển khai và hiển thị các ràng buộc mật khẩu sao cho thích hợp trong quá trình đăng ký. Ví dụ như: mật khẩu phải chứa một ký tự đặc biệt hoặc phải dài ít nhất 8 ký tự.
Chúng ta muốn sử dụng các quy tắc mật khẩu mạnh mẽ nhưng không muốn triển khai các quy tắc này theo cách thủ công. Vì vậy, chúng ta cần tận dụng tốt thư viện Passay.
2. Tùy chỉnh ràng buộc mật khẩu
Đầu tiên, hãy tạo một ràng buộc ValidPassword
:
@Documented
@Constraint(validatedBy = PasswordConstraintValidator.class)
@Target({ TYPE, FIELD, ANNOTATION_TYPE })
@Retention(RUNTIME)
public @interface ValidPassword {
String message() default "Invalid Password";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
Và sử dụng nó trong UserDto
:
@ValidPassword
private String password;
3. Tùy chỉnh trình xác thực mật khẩu
Bây giờ, hãy sử dụng thư viện để tạo một số quy tắc mật khẩu mạnh mẽ mà không cần phải thực hiện thủ công bất kỳ quy tắc nào trong số đó.
Chúng ta sẽ tạo trình xác thực mật khẩu PassConstraintValidator
và xác định các quy tắc cho mật khẩu:
public class PasswordConstraintValidator implements ConstraintValidator<ValidPassword, String> {
@Override
public void initialize(ValidPassword arg0) {
}
@Override
public boolean isValid(String password, ConstraintValidatorContext context) {
PasswordValidator validator = new PasswordValidator(Arrays.asList(
new LengthRule(8, 30),
new UppercaseCharacterRule(1),
new DigitCharacterRule(1),
new SpecialCharacterRule(1),
new NumericalSequenceRule(3,false),
new AlphabeticalSequenceRule(3,false),
new QwertySequenceRule(3,false),
new WhitespaceRule()));
RuleResult result = validator.validate(new PasswordData(password));
if (result.isValid()) {
return true;
}
context.disableDefaultConstraintViolation();
context.buildConstraintViolationWithTemplate(
Joiner.on(",").join(validator.getMessages(result)))
.addConstraintViolation();
return false;
}
}
Lưu ý cách chúng ta tạo ra vi phạm ràng buộc mới ở đây và vô hiệu hóa vi phạm ràng buộc mặc định – trong trường hợp mật khẩu không hợp lệ.
Cuối cùng, hãy thêm thư viện Passay vào pom của chúng ta:
<dependency>
<groupId>org.passay</groupId>
<artifactId>passay</artifactId>
<version>1.0</version>
</dependency>
Để hiểu rõ hơn về lịch sử, Passay được xem là phiên bản tiếp theo của thư viện Java vt-password, một thư viện được ưa chuộng từng tồn tại trong cộng đồng Java.
4. Đo độ mạnh mật khẩu JS
Bây giờ, phía máy chủ đã hoàn tất, chúng ta hãy xem xét phía máy khách và triển khai chức năng “Password Strength” đơn giản bằng JavaScript.
Chúng tôi sẽ sử dụng một plugin jQuery đơn giản – jQuery Password Strength Meter for Twitter Bootstrap – để hiển thị độ mạnh mật khẩu trong registration.html:
<input id="password" name="password" type="password"/>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>
<script src="pwstrength.js"></script>
<script type="text/javascript">
$(document).ready(function () {
options = {
common: {minChar:8},
ui: {
showVerdictsInsideProgressBar:true,
showErrors:true,
errorMessages:{
wordLength: '<spring:message code="error.wordLength"/>',
wordNotEmail: '<spring:message code="error.wordNotEmail"/>',
wordSequences: '<spring:message code="error.wordSequences"/>',
wordLowercase: '<spring:message code="error.wordLowercase"/>',
wordUppercase: '<spring:message code="error.wordUppercase"/>',
wordOneNumber: '<spring:message code="error.wordOneNumber"/>',
wordOneSpecialChar: '<spring:message code="error.wordOneSpecialChar"/>'
}
}
};
$('#password').pwstrength(options);
});
</script>
5. Kết luận
Và thế là đã hoàn thành, đây là một cách đơn giản nhưng rất hữu ích để thể hiện độ mạnh của mật khẩu ở phía máy khách cũng như là để thực thi các quy tắc mật khẩu nhất định ở phía máy chủ.
Bạn có thể tìm thấy cách triển khai đầy đủ hướng dẫn này trong dự án github. Với việc dựa trên Eclipse, việc nhập và chạy dự án này sẽ trở nên đơn giản và thuận tiện hơn bao giờ hết.
Bình luận