मैं यह भी मानता हूं कि स्प्रिंग सिक्योरिटी बहुत जटिल (मुझे) लगती है। बेशक, वे बातें, जटिलता को कम करने के लिए कस्टम एक्सएमएल नामस्थान बनाने एक्सएमएल विन्यास की मात्रा को कम करने के लिए की तरह किया है, लेकिन मेरे लिए, इन का पता नहीं मेरी स्प्रिंग सुरक्षा के साथ व्यक्तिगत मूलभूत मुद्दे को हैं: इसके नाम और अवधारणाएं अक्सर सामान्य रूप से भ्रमित होती हैं मुझे। बस 'इसे हासिल करना' मुश्किल है।
दूसरा आप शिरो का उपयोग करना शुरू करते हैं, हालांकि, आप बस इसे प्राप्त करते हैं। सुरक्षा की दुनिया में जो समझना मुश्किल था, उसे समझना इतना आसान है। ऐसी चीजें जो जेडीके (जैसे सिफर्स) में उपयोग करने के लिए असहनीय रूप से कठिन होती हैं, उन्हें एक स्तर पर सरल किया जाता है जो कि केवल बीबरबल नहीं है, लेकिन अक्सर उपयोग करने के लिए एक खुशी है।
उदाहरण के लिए, आपने हैश + सॉल्ट को एक पासवर्ड और बेस 64 को जावा या स्प्रिंग सिक्योरिटी में कैसे एनकोड किया है? न ही शेरो के समाधान के रूप में सरल और सहज हैं:
ByteSource salt = new SecureRandomNumberGenerator().nextBytes();
new Sha512Hash(password, salt).toBase64();
कॉमन्स-कोडेक या कुछ और के लिए कोई ज़रूरत नहीं है। बस शेरो जार।
अब स्प्रिंग वातावरण के संबंध में, शिरो डेवलपर्स के अधिकांश वसंत को अपने प्राथमिक अनुप्रयोग वातावरण के रूप में उपयोग करते हैं। इसका मतलब है कि शिरो का स्प्रिंग एकीकरण शानदार है और यह सभी असाधारण रूप से अच्छी तरह से काम करता है। आप निश्चिंत हो सकते हैं कि यदि आप एक स्प्रिंग ऐप लिख रहे हैं, तो आपके पास एक अच्छी तरह गोल सुरक्षा अनुभव होगा।
उदाहरण के लिए, इस धागे में एक अन्य पोस्ट में स्प्रिंग एक्सएमएल कॉन्फ़िगरेशन उदाहरण पर विचार करें। यहाँ है कि आप शिरो में एक ही चीज़ (अनिवार्य रूप से) कैसे करेंगे:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd>
<bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
<property name="securityManager" ref="securityManager"/>
<property name="loginUrl" value="/login.jsp"/>
<property name="successUrl" value="/home.jsp"/>
<property name="unauthorizedUrl" value="/unauthorized.jsp"/>
<property name="filterChainDefinitions">
<value>
/secure/** = authc
/** = anon
</value>
</property>
</bean>
<bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">
<property name="realm" ref="myRealm"/>
</bean>
<bean id="myRealm" class="...">
...
</bean>
हालांकि अन्य स्प्रिंग उदाहरण की तुलना में थोड़ा अधिक क्रियात्मक है, आईएमओ को पढ़ना आसान है।
आपको यह भी पता चलेगा कि शेरो की फ़िल्टर श्रृंखला परिभाषाओं का उपयोग करना शायद सामान्य फ़िल्टर श्रृंखलाओं और वेब-आधारित सुरक्षा नियमों को परिभाषित करने का सबसे आसान तरीका है! Web.xml में उन्हें परिभाषित करने की तुलना में बहुत अच्छा है।
अंत में, शिरो चरम 'प्लगेबिलिटी' प्रदान करता है। आप देखेंगे कि आप शिरो के POJO / इंजेक्शन के अनुकूल वास्तुकला के कारण कुछ भी कॉन्फ़िगर और / या बदल सकते हैं। शिरो ने लगभग सभी चीज़ों को डिफ़ॉल्ट रूप से डिफॉल्ट कर दिया और आप केवल उसी चीज़ को ओवरराइड या कॉन्फ़िगर कर सकते हैं जिसकी आपको आवश्यकता है।
दिन के अंत में, मुझे लगता है कि इन दोनों में से किसी एक को चुनना आपके मानसिक मॉडल के बारे में अधिक है - दोनों में से कौन अधिक समझदार है और आपके लिए अधिक सहज है? कुछ के लिए यह शिरो होगा, दूसरों के लिए यह स्प्रिंग सिक्योरिटी होगी। शिरो वसंत के वातावरण में बहुत अच्छा काम करता है, इसलिए मैं कहूंगा कि आप दोनों में से किसके आधार पर आप अधिक आनंद लेते हैं और आपको सबसे अधिक समझ में आता है।
शिरो के स्प्रिंग एकीकरण पर अधिक जानकारी के लिए: http://shiro.apache.org/spring.html