अपने स्वयं के बीएफडी रोल करना मुश्किल नहीं है। स्प्रिंग सिक्योरिटी 3.0 में आप बस एप्लिकेशन श्रोताओं को जोड़ सकते हैं (धन्यवाद Stephen C सही दिशा में मुझे इंगित करने के लिए)।
यह श्रोता कॉल किया जाएगा प्रमाणीकरण विफलताएं दिखाई देते हैं:
@Component
public class AuthenticationFailureListener
implements ApplicationListener<AuthenticationFailureBadCredentialsEvent> {
@Autowired
private UserDao userDao;
public void onApplicationEvent(AuthenticationFailureBadCredentialsEvent ev) {
String username = ev.getAuthentication().getName();
User user = userDao.find("name", username);
if (user != null) { // only for existing users
user.reportLoginFailure();
userDao.commit();
}
}
}
प्रत्येक प्रमाणीकरण विफलता अब उपयोगकर्ता को सूचित करेंगे। उदाहरण के लिए उपयोगकर्ता प्रमाणीकरण विफलता काउंटर को बढ़ाता है और एक निश्चित दहलीज तक पहुंचने पर इसे स्वयं निष्क्रिय कर देता है।
@Component
public class AuthenticationSuccessEventListener
implements ApplicationListener<AuthenticationSuccessEvent>{
@Autowired
private UserDao userDao;
public void onApplicationEvent(AuthenticationSuccessEvent event) {
String username = event.getAuthentication().getName();
User user = userDao.find("name", username);
user.reportLoginOK();
userDao.commit();
}
}
ऊपर श्रोताओं अतिरिक्त XML विन्यास की जरूरत नहीं होगी और स्वचालित रूप से उठाया जाता है:
एक उपयोगकर्ता सही ढंग से प्रमाणीकृत किया जाता है तो नीचे दिए गए श्रोता उपयोगकर्ता को सूचित करेंगे (उदाहरण के लिए, जो रीसेट कर सकते हैं यह प्रमाणीकरण विफलता काउंटर है) वसंत द्वारा (यदि वे वसंत घटक-स्कैन पैकेज में हैं)।
आपके लेनदेन विन्यास के आधार पर यह समाधान कुछ असफल लॉगिन गणनाओं को याद कर सकता है यदि वे एक साथ निकट होते हैं। यदि आप उपयोगकर्ता को लोड करने के बजाय एक ही अद्यतन क्वेरी के साथ काउंटर को अपडेट करते हैं और फिर परिवर्तनों को सहेजते हैं तो इसे रोका जा सकता है।
ऊपर श्रोताओं को अन्य बीडीएफ पैटर्न का पता लगाने के लिए भी बढ़ाया जा सकता है, उदाहरण के लिए एक एकल आईपी जो बहुत से (यादृच्छिक) उपयोगकर्ता नामों पर स्कैन कर रहा है।
कृपया ध्यान दें कि सभी लॉगिन विधियां प्रमाणीकरण SUccessEvent का उपयोग नहीं करती हैं। आप इंटरएक्टिव प्रमाणीकरण SUccessEvent भी देख सकते हैं। – Florian
अच्छा। धन्यवाद! यदि मैं कर सकता हूं, तो आप हैंडलर के मशीनीवाद का उपयोग क्यों नहीं करते हैं, जैसे प्रमाणीकरणफेलर हैंडलर? मेरा मतलब है, हैंडलर के बजाय श्रोता का उपयोग क्यों करें? कोई पेशेवर/विपक्ष? – OhadR
आपको यह भी पता होना चाहिए कि एक हमला किया गया खाता लॉक करना मतलब है कि आपकी सेवा को डोसबल बनाया जाए। प्रसिद्ध उदाहरण यह है: आप नीलामी सेवा प्रदान करते हैं, बॉब कुछ स्थिति खरीदना चाहता है और ऐलिस के खाते पर हमला करना चाहता है, इसलिए बेटों को बनाने के बजाए ऐलिस अपने खाते को बहाल करने की कोशिश करता है जबकि बॉब को स्थिति मिलती है। यहां तक कि अस्थायी (5 सेकंड) ताले ऐलिस को सेवा की आवश्यकता के रूप में सेवा का उपयोग करने से रोक सकते हैं। – otonglet