Wie zu verwenden HttpServletRequest#login() programmatische login mit SHA-256 Sicherheit konfiguriert Reich
habe ich gelesen,es, ich bin mit glassfish 3.1.1 Sicherheitsrealm konfiguriert mit sha-256-digest-Algorithmus. gibt es irgendein tutorial dazu ? vielleicht bin ich blethering, ich bin versucht, die Anmeldung mit diesem code:
public void login() throws NoSuchAlgorithmException {
FacesContext context = FacesContext.getCurrentInstance();
HttpServletRequest request = (HttpServletRequest)context.getExternalContext().getRequest();
EntityManager em = emf.createEntityManager();
boolean committed = false;
try {
FacesMessage msg = null;
EntityTransaction entr = em.getTransaction();
entr.begin();
try {
MessageDigest md = MessageDigest.getInstance("SHA-256");
md.update(password.getBytes());
byte byteData[] = md.digest();
StringBuffer sb = new StringBuffer();
for (int i = 0; i < byteData.length; i++) {
sb.append(Integer.toString((byteData[i] & 0xff) + 0x100, 16).substring(1));
}
password = sb.toString();
Query query = em.createQuery("SELECT COUNT(u) FROM EntityUser u WHERE u.userName = :userName AND u.password = :password")
.setParameter("userName", userName).setParameter("password", password);
long result = (long)query.getSingleResult();
if (result == 1) {
request.login(userName, password);
msg = new FacesMessage();
msg.setSeverity(FacesMessage.SEVERITY_INFO);
msg.setSummary("You are logged in");
}
entr.commit();
committed = true;
} catch (ServletException e) {
context.addMessage(null, new FacesMessage("wrong username or password"));
}
finally {
if (!committed) entr.rollback();
}
} finally {
em.close();
}
}
Ergebnis variable 1 zurück, aber verlangen.login(userName, Passwort); die Methode im if-Bedingung immer throws servletexception.
Ich habe das gleiche problem: Formular-Authentifizierung (j_security_check) tatsächlich funktioniert, aber das aufrufen Anfrage.login() nicht. Wie hast du es lösen?
Ich konnte nicht gelöst werden. Ich bin nicht mit jsf mehr
Ich konnte nicht gelöst werden. Ich bin nicht mit jsf mehr
InformationsquelleAutor Deniz | 2012-04-24
Du musst angemeldet sein, um einen Kommentar abzugeben.
Kannst du die exception stacktrace? So wäre es einfacher zu verstehen, die Quelle der Ausnahme. Aber ausgehend von Ihrem derzeit bereitgestellten code, den Sie liefern sollte, in
das Kennwort als nur-text-Kennwort und nicht das gehashte Kennwort.
InformationsquelleAutor Fritz
Kann es eine Menge von Gründen, die Anmeldung schlägt fehl. Sie haben nur geprüft, wenn entsprechende Benutzer und das Passwort sind in der Tabelle. Glassfish lässt zwei Abfragen - Authentifizierung-Prozess - um zwei Tabellen. Eine Tabelle angegeben, die als
userTable
, und die zweite zumgroupTable
die sind bestimmt in Sicherheit Reich definition. Überprüfen Sie, ob web.xml und glassfish-web.xml korrekt sind auch.InformationsquelleAutor Zbyszek
die Frage gestellt, problem ist das ganze über Methode
Autor alles richtig machte, auch seine eigene Authentifizierung arbeiten mit Benutzer-Datenbank, aber Anfrage.login muss für die Authentifizierung realm eingerichtet werden, die von dieser Methode. Und Sie haben Ihre eigenen, die Sie nicht benötigen separate Anfrage.login - Authentifizierung. Für den Fall, dass Sie es brauchen - das ist, wie Sie es tun jdbc-realm-setup-mit-glassfish-v3
So, nachdem Sie das Ergebnis erhalten=1, richten Sie Ihre
context.getExternalContext().getSessionMap().put("user", u);
und senden Umleitung
context.getExternalContext().redirect(context.getExternalContext().getRequestContextPath() + "какой-то модуль.xhtml");
und verwenden webfilter blockiert den Zugriff auf /Pages/*.xhtml-ohne Anmeldung.
InformationsquelleAutor rustem.russia