Ben de Spring Security'nin çok karmaşık göründüğüne katılıyorum (bana). Tabii, XML yapılandırma miktarını azaltmak için özel XML ad alanlarını oluşturmak gibi karmaşıklığını azaltmak için şeyler yapmış, ama benim için bu adresi yok benim Bahar Security ile kişisel temel sorununu: kendi isim ve kavramlar sıklıkla generalliğe içinde kafa karıştırıcıdır ben mi. Sadece 'elde etmek' zor.
Shiro'yu kullanmaya başladığınız anda, sadece 'anlıyorsunuz'. Güvenlik dünyasında anlaşılması zor olan şey, anlaşılması çok daha kolay. JDK'da kullanımı dayanılmaz derecede zor olan şeyler (örneğin, Şifreler), sadece katlanılabilir değil, aynı zamanda kullanımı zevkli bir düzeye kadar basitleştirilmiştir.
Örneğin, bir parolayı nasıl hash + tuzlarsınız ve base64, Java veya Spring Security'de kodlar? İkisi de Shiro'nun çözümü kadar basit ve sezgisel değildir:
ByteSource salt = new SecureRandomNumberGenerator().nextBytes();
new Sha512Hash(password, salt).toBase64();
Ortak kod çözücüye veya başka bir şeye gerek yok. Sadece Shiro kavanozu.
Artık Spring ortamlarıyla ilgili olarak, Shiro geliştiricilerinin çoğu Spring'i birincil uygulama ortamı olarak kullanıyor. Bu, Shiro'nun Bahar entegrasyonunun mükemmel olduğu ve her şeyin olağanüstü derecede iyi çalıştığı anlamına gelir. Bir Spring uygulaması yazıyorsanız, çok yönlü bir güvenlik deneyimine sahip olacağınızdan emin olabilirsiniz.
Örneğin, bu ileti dizisindeki başka bir gönderideki Spring XML yapılandırma örneğini düşünün. Shiro'da aynı şeyi (esasen) şu şekilde yaparsınız:
<?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>
Diğer Bahar örneğinden biraz daha ayrıntılı olmasına rağmen, IMO'yu okumak daha kolaydır.
Ayrıca Shiro'nun filtre zinciri tanımlarını kullanmanın, genel filtre zincirlerini ve web tabanlı güvenlik kurallarını tanımlamanın muhtemelen en kolay yolu olduğunu göreceksiniz! Bunları web.xml'de tanımlamaktan çok daha güzel.
Son olarak, Shiro aşırı 'takılabilirlik' de sunuyor. Shiro'nun POJO / enjeksiyon dostu mimarisi sayesinde hemen hemen her şeyi yapılandırabileceğinizi ve / veya değiştirebileceğinizi göreceksiniz. Shiro, hemen hemen her şeyi varsayılan ayarlara getirir ve yalnızca ihtiyacınız olanı geçersiz kılabilir veya yapılandırabilirsiniz.
Günün sonunda, bu ikisinden birini seçmenin daha çok zihinsel modelinizle ilgili olduğunu düşünüyorum - hangisi sizin için daha mantıklı ve daha sezgisel? Bazıları için Shiro, diğerleri için Bahar Güvenliği olacak. Shiro, Bahar ortamlarında harika çalışıyor, bu yüzden ikisinden hangisini daha çok sevdiğinizi ve sizin için en mantıklı olanı seçmenizi söyleyebilirim.
Shiro'nun Bahar entegrasyonu hakkında daha fazla bilgi için: http://shiro.apache.org/spring.html