ฉันยอมรับเช่นกันว่า Spring Security รู้สึกซับซ้อนเกินไป (สำหรับฉัน) แน่นอนว่าพวกเขาได้ทำสิ่งต่างๆเพื่อลดความซับซ้อนเช่นการสร้างเนมสเปซ XML ที่กำหนดเองเพื่อลดปริมาณการกำหนดค่า XML แต่สำหรับฉันสิ่งเหล่านี้ไม่ได้ช่วยแก้ปัญหาพื้นฐานส่วนตัวของฉันกับ Spring Security: ชื่อและแนวคิดมักจะสับสนโดยทั่วไป ผม. มันยากที่จะ 'รับมัน'
วินาทีที่คุณเริ่มใช้ชิโระคุณก็แค่ 'เข้าใจ' สิ่งที่ยากที่จะเข้าใจในโลกแห่งความปลอดภัยนั้นเข้าใจง่ายกว่ามาก สิ่งที่ยากเหลือทนที่จะใช้ใน JDK (เช่น Ciphers) ถูกทำให้ง่ายขึ้นจนถึงระดับที่ไม่เพียง แต่ทนทาน แต่มักจะเป็นความสุขที่จะใช้
ตัวอย่างเช่นคุณแฮช + เกลือรหัสผ่านและ base64 เข้ารหัสใน Java หรือ Spring Security ได้อย่างไร ไม่ง่ายและใช้งานง่ายเหมือนโซลูชันของ Shiro:
ByteSource salt = new SecureRandomNumberGenerator().nextBytes();
new Sha512Hash(password, salt).toBase64();
ไม่จำเป็นต้องใช้ตัวแปลงสัญญาณคอมมอนส์หรือสิ่งอื่นใด แค่โถชิโระ
ตอนนี้เกี่ยวกับสภาพแวดล้อม Spring นักพัฒนา Shiro ส่วนใหญ่ใช้ Spring เป็นสภาพแวดล้อมแอปพลิเคชันหลัก นั่นหมายความว่าการผสานรวม Spring ของ Shiro นั้นยอดเยี่ยมและทุกอย่างทำงานได้ดีเป็นพิเศษ คุณสามารถมั่นใจได้ว่าหากคุณเขียนแอป Spring คุณจะได้รับประสบการณ์ด้านความปลอดภัยที่รอบรู้
ตัวอย่างเช่นพิจารณาตัวอย่างการกำหนดค่า Spring XML ในโพสต์อื่นในเธรดนี้ นี่คือวิธีที่คุณทำ (โดยพื้นฐาน) ในสิ่งเดียวกันใน Shiro:
<?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>
แม้ว่าจะมีรายละเอียดมากกว่าตัวอย่าง Spring อื่น ๆ เล็กน้อย แต่ก็อ่าน IMO ได้ง่ายกว่า
นอกจากนี้คุณจะพบว่าการใช้คำจำกัดความของห่วงโซ่ตัวกรองของ Shiro อาจเป็นวิธีที่ง่ายที่สุดในการกำหนดเครือข่ายตัวกรองทั่วไปและกฎความปลอดภัยบนเว็บเลยทีเดียว! ดีกว่าการกำหนดใน web.xml
ในที่สุด Shiro ก็มี 'pluggability' ที่ยอดเยี่ยม คุณจะเห็นว่าคุณสามารถกำหนดค่าและ / หรือแทนที่อะไรก็ได้เพราะสถาปัตยกรรม POJO / injection-friendly ของ Shiro Shiro ตั้งค่าเริ่มต้นเกือบทุกอย่างเป็นค่าเริ่มต้นที่ดีและคุณสามารถแทนที่หรือกำหนดค่าเฉพาะสิ่งที่คุณต้องการได้
ในตอนท้ายของวันฉันคิดว่าการเลือกทั้งสองอย่างนี้เกี่ยวข้องกับแบบจำลองทางจิตของคุณมากกว่า - ข้อใดในสองข้อที่เหมาะสมกว่าและใช้งานง่ายสำหรับคุณ สำหรับบางคนจะเป็นชิโระส่วนคนอื่น ๆ จะเป็น Spring Security ชิโระใช้งานได้ดีในสภาพแวดล้อมฤดูใบไม้ผลิดังนั้นฉันจะบอกว่าเลือกตามว่าคุณชอบแบบไหนมากกว่ากันและเหมาะสมกับคุณมากที่สุด
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการรวม Spring ของ Shiro: http://shiro.apache.org/spring.html