ログインメカニズムが次のようなJSF + JPA Webアプリケーションがあります。
- ユーザー名は暗号化されています
- パスワードはハッシュ化されています
- 中古ジャシプト
- ユーザーがログインしようとすると、すべてのユーザーがループします。
- すべてのユーザーのユーザー名が復号化され、入力されたユーザー名と照合されます。
- それが一致する場合、パスワードはハッシュされ、保存されているハッシュされたパスワードと照合されます。
ユーザー数が多いことが予想される別のアプリケーションでは、別のフィールドとして保存されている最初の 3 文字からユーザーをフィルター処理します。
私が使用した準最適な方法論を指摘し、正しい行動を導くことができれば、あなたに感謝します.
暗号化に関連するコントローラがリストされます
import java.io.Serializable;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import org.jasypt.util.password.BasicPasswordEncryptor;
import org.jasypt.util.text.BasicTextEncryptor;
@ManagedBean
@SessionScoped
public class SecurityController implements Serializable {
private static final long serialVersionUID = 1L;
public SecurityController() {
}
public String encrypt(String word) {
BasicTextEncryptor en = new BasicTextEncryptor();
en.setPassword("health");
try {
return en.encrypt(word);
} catch (Exception ex) {
return null;
}
}
public String hash(String word) {
try {
BasicPasswordEncryptor en = new BasicPasswordEncryptor();
return en.encryptPassword(word);
} catch (Exception e) {
return null;
}
}
public boolean matchPassword(String planePassword, String encryptedPassword) {
BasicPasswordEncryptor en = new BasicPasswordEncryptor();
return en.checkPassword(planePassword, encryptedPassword);
}
public String decrypt(String word) {
BasicTextEncryptor en = new BasicTextEncryptor();
en.setPassword("health");
try {
return en.decrypt(word);
} catch (Exception ex) {
return null;
}
}
}
これは、私が認証をチェックする方法です。
private boolean checkUsers() {
String temSQL;
temSQL = "SELECT u FROM WebUser u WHERE u.retired = false";
List<WebUser> allUsers = getFacede().findBySQL(temSQL);
for (WebUser u : allUsers) {
if (getSecurityController().decrypt(u.getName()).equalsIgnoreCase(userName)) {
if (getSecurityController().matchPassword(passord, u.getWebUserPassword())) {
setLoggedUser(u);
setLogged(Boolean.TRUE);
setActivated(u.isActivated());
setRole(u.getRole());
getMessageController().setDefLocale(u.getDefLocale());
getMeController().createMenu();
getWebUserBean().setLoggedUser(u);
UtilityController.addSuccessMessage("Logged successfully");
return true;
}
}
}
return false;
}