Ještě před pár dny jsem skoro nevěděl, co to je NTLM a dnes tento autentifikační protokol používám v mé aplikaci.
Našel jsem na jednom blogu parádní článek, kde je víceméně vše podstatné k implementaci pomocí Spring security řečeno. Nemá cenu se tedy opakovat, spíše bych přidal některé moje poznámky a doplnění:
- autor článku místo ukázky zřetězení filtrů (Virtual filter chain resp. FilterChainProxy) znovu vložil již dříve uvedený kus kódu. Zde bych to tedy napravil. Pořadí filtrů není libovolné, je nutné si dát pozor na to, že filtr NtlmProcessingFilter musí být za filtrem ExceptionTranslationFilter. Já osobně jsem použil toto zřetězení:
/ntlm/**=httpSessionContextIntegrationFilter,logoutFilter,ntlmExceptionTranslationFilter,ntlmFilter,filterInvocationInterceptor
- druhá věc, na kterou je potřeba si dát pozor je ta, že filtr NtlmProcessingFilter slouží pouze pro autentifikaci, nikoliv pro autorizaci uživatelů. Je zde potřeba myslet na to, že při načítání UserDetails pomocí UserDetailsService musí být hodnota uživatelského hesla prázdná. Pro testovací účely si načítám informace o uživatelích z properties souboru (InMemoryDaoImpl), kde mám tento řádek (pozice pro heslo není vyplněna):
pjuza=,ROLE_ANALYST, ROLE_READER
- V článku jsem nepochopil autorovu implementaci UserDetailsAuthenticationProvider. Já jsem nic podobného dělat nemusel. Jediné co jsem musel nakonfigurovat pro NTLM byly filtry NtlmProcessingFilter, ExceptionTranslationFilter a musel jsem tyto filtry přidat do FilterChainProxy.
- NTLM je oficiálně až ve Spring security. Nicméně i v Acegi security lze využít NTLM, viz článek Acegi Security and NTLM.
Další zdroje k implementaci NTLM:
- The Java CIFS Client Library (jCIFS)
- tutoriál k Active Directory
- odkazy na Wikipedii: Domain controller, WINS, SMB
1 komentář:
test openid serveru
Okomentovat