2010-08-09 10 views
10

używam jdbcRealm dla bezpieczeństwa w moim GlassFish v3.0.1 B22. Jest skonfigurowany tak, aby używać tabeli USER w mojej bazie danych do uwierzytelniania, śledząc ten blog: http://blogs.oracle.com/foo/entry/mort_learns_jdbc_realm_authentication. Mam to działa dobrze, jeśli zostawiam algorytm digest jako zwykły tekst. Jednak gdy spróbuję użyć algorytmu skrótu SHA-256, przestaje działać. Co zrobiłem to określić w GlassFish - bezpieczeństwo - Realm - jdbcRealm - strawienia, że ​​chcę, SHA-256 (I wystarczy wpisać SHA-256 wewnątrz strawienia pole). Następnie napisałem prosty program w języku Java, aby przekonwertować tekst hasła na skrót SHA-256. Następnie wkleję ten skrót do mojego pola hasła w bazie danych. Nawiasem mówiąc, pole hasła to varchar (30). Nie mogę się już zalogować. Jedna rzecz, którą zauważam, to że mój prosty program w języku Java generował różne wartości mieszania za każdym razem dla tego samego pola tekstowego.GlassFish Bezpieczeństwo - jdbcRealm: Jak skonfigurować logowanie z SHA-256 strawienia

Poniżej mój prosty program Java:

 MessageDigest md = MessageDigest.getInstance("SHA-256"); 
     String text = "admin"; 
     md.update(text.getBytes("UTF-8")); 
     byte[] digest = md.digest(); 
     System.out.println(digest.toString()); 
+0

Mam problem z migracją od 4.0 do 4.1.1 http://stackoverflow.com/questions/40686737/migration-from-glassfish-4-0-to-glassfish-4-1-1-jdbc-realm -przyp. – Bikram

Odpowiedz

16

jdbcRealm pozwala wartości kodowania base64 lub hex. Musisz określić jeden z nich w konfiguracji realm i w kodzie, przekonwertować tablicę bajtów w jednym z tych formatów:

Base64:

import com.sun.org.apache.xml.internal.security.utils.Base64; 
... 
byte[] digest = md.digest(); 
System.out.println(Base64.encode(digest)); 

Hex:

... 
byte[] digest = md.digest(); 
StringBuffer sb = new StringBuffer(); 
for (int i = 0; i < digest.length; i++) { 
    String hex = Integer.toHexString(0xff & digest[i]); 
    if (hex.length() == 1) sb.append('0'); 
    sb.append(hex); 
} 
System.out.println(sb.toString()); 

btw, pole hasła to varchar (30)

Musisz zwiększyć wielkość swojej dziedzinie hasłem. SHA-256 base64 i wartości szesnastkowe mają odpowiednio długość 45 i 64 znaki.

+0

Super !!! Jesteś ratownikiem życia. Zajmowałem się tym od dłuższego czasu. Dziękuję Ci bardzo. Jest do bani, że mogę dać ci tylko 1 głos. –

+0

Mam problem z migracją od 4.0 do 4.1.1 http://stackoverflow.com/questions/40686737/migration-from-glassfish-4-0-to-glassfish-4-1-1-jdbc-realm-issue – Bikram

Powiązane problemy