บทความนี้ครอบคลุมวิธีการรวม Shiro เข้ากับแอปพลิเคชันที่ใช้ฤดูใบไม้ผลิ
ความเข้ากันได้ของ Java Bean ของ Shiro ทำให้เหมาะสำหรับการกำหนดค่าผ่าน Spring XML หรือกลไกการกำหนดค่าสปริงอื่น ๆ แอปพลิเคชันของ Shiro ต้องการอินสแตนซ์ของแอปพลิเคชัน Singleton Security Manager (SecuriyManager) โปรดทราบว่านี่ไม่จำเป็นต้องเป็นซิงเกิลแบบคงที่ แต่แอปพลิเคชันควรใช้เพียงหนึ่งอินสแตนซ์ไม่ว่าจะเป็นซิงเกิลแบบคงที่หรือไม่ก็ตาม
1. แอปพลิเคชันแบบสแตนด์อโลน
นี่คือวิธีที่ง่ายที่สุดในการเปิดใช้งาน Application Singleton Security Manager ในแอปพลิเคชันฤดูใบไม้ผลิ:
<!-กำหนดอาณาจักรที่เชื่อมต่อกับแหล่งข้อมูลที่ปลอดภัยแบ็กเอนด์:-> <bean id = "MyRealm"> ... </ebean> <bean id = "SecurityManager"> <!-สิ่งนี้เขียนโดยแอปพลิเคชันอาณาจักรเดียว หากมีหลายอาณาจักรคุณสามารถใช้คุณสมบัติ "Realms"-> <property name = "realm" ref = "MyRealm"/> </ebean> <bean id = "LifecycleclebeanPostProcessor"/> <!-สำหรับการรวมตัวที่ง่ายที่สุด แต่อย่าทำสิ่งนี้ในเว็บแอปพลิเคชัน ดูส่วน "เว็บแอปพลิเคชัน" ด้านล่าง -> <bean> <property name = "StaticMethod" value = "org.apache.shiro.securityutils.setsecurityManager"/> <property name = "อาร์กิวเมนต์" ref = "SecurityManager"/> </epean>
2. แอปพลิเคชัน Web
ชิโรมีการสนับสนุนที่ยอดเยี่ยมสำหรับแอปพลิเคชันเว็บฤดูใบไม้ผลิ ในเว็บแอปพลิเคชันคำขอเว็บที่มีอยู่ทั้งหมดจะต้องผ่านตัวกรอง Shiro ตัวกรองนี้มีประสิทธิภาพมากและช่วยให้สามารถปรับแต่งเป็นพิเศษของห่วงโซ่ตัวกรองใด ๆ ตามนิพจน์เส้นทาง URL
ก่อนที่จะมี Shiro 1.0 คุณต้องใช้วิธีการไฮบริดใน Spring Web Applications เพื่อกำหนดตัวกรองของ Shiro คุณสมบัติการกำหนดค่าทั้งหมดอยู่ใน web.xml แต่การกำหนด SecurityManager ใน Spring.xml นั้นค่อนข้างไม่เป็นมิตร
ตอนนี้ใน Shiro 1.0 หรือสูงกว่าการกำหนดค่า Shiro ทั้งหมดจะทำใน Spring XML ซึ่งให้กลไกการกำหนดค่าสปริงที่แข็งแกร่งยิ่งขึ้น
นี่คือวิธีกำหนดค่า Shiro ในเว็บแอปพลิเคชันที่ใช้สปริง:
web.xml
นอกเหนือจากแท็กสปริงอื่น ๆ (contextloaderListener, log4jconfiglistener ฯลฯ ) ตัวกรองและการแมปตัวกรองต่อไปนี้จะถูกกำหนด:
<!- ใน ApplicationContext.xml ชื่อของชื่อตัวกรอง "Shirofilter" การจับคู่ถั่ว -> <filter> <filter-name> shirofilter </filter-name> <filter-class> org.springframework.web.filter.delegatingFilterProxy </filter-class> <init-param> </init-param> </tilter> ... <!-ตรวจสอบให้แน่ใจว่ามีคำขอใด ๆ ที่คุณต้องการสามารถกรองได้ /* จับคำขอทั้งหมด โดยทั่วไปแล้วแผนที่ตัวกรองนี้จะถูกกำหนดไว้ก่อน (ก่อนอื่นทั้งหมด) เพื่อให้แน่ใจว่าชิโรทำงานในตัวกรองที่ตามมาในห่วงโซ่ตัวกรอง:-> <ฟิลเตอร์-แมป> <filter-name> shirofilter </filter-name> <url-pattern>/*</url-pattern>
ApplicationContext.xml
ในไฟล์ ApplicationContext.xml ให้กำหนดความปลอดภัย MANAGER และถั่ว "Shirofilter" ที่ใช้กับเว็บซึ่งจะอ้างอิงใน web.xml
<bean id = "shirofilter"> <property name = "SecurityManager" ref = "SecurityManager"/> <!- กำหนดคุณสมบัติต่อไปนี้ตามสถานการณ์ที่เฉพาะเจาะจง: <property name = "loginurl" value = "/login.jsp"/> <property name = "successUrl" value = "home.jsp"/> -> <!-หากมีการประกาศ javax.servlet คุณสมบัติ "ตัวกรอง" ไม่จำเป็น-> <!-<property name = "ตัวกรอง"> <util: แผนที่> <entry key = "analias" value-ref = "somefilter" /admin/** = authc, บทบาท [admin]/docs/** = authc, perms [เอกสาร: อ่าน]/** = authc </value> </porement> </ebean> <!- javax.servlet.filter ถั่วที่สามารถกำหนดได้ในบริบทโดยอัตโนมัติ หากจำเป็นคุณสามารถเพิ่มแผนที่ "ตัวกรอง" ของ Shirofilter ด้วยตนเอง/ชัดเจน -> <bean id = "somefilter"/> <bean id = "Another filter"> ... </epean> ... <bean id = "SecurityManager"> <!-สิ่งนี้เขียนโดยแอปพลิเคชันอาณาจักรเดียว หากมีหลายอาณาจักรคุณสามารถใช้คุณสมบัติ "อาณาจักร" -> <property name = "Realm" ref = "MyRealm"/> <!-ในกรณีของการรับรู้เซสชันของคอนเทนเนอร์ servlet ใช้ได้ หลังจากการไม่ทำให้ไม่รู้สึกถึงบรรทัดนี้ให้ใช้เซสชันดั้งเดิมของ Shiro-> <!-<property name = "SessionMode" value = "Native"/>-> </epean> <bean id = "lifecyclebeanpostprocessor"/> <!-ใช้แหล่งข้อมูลพื้นหลังโดยการปรับแต่ง
ชิโร่เปิดใช้คำอธิบายประกอบ
ในแอปพลิเคชันคุณอาจต้องใช้คำอธิบายประกอบของ Shiro สำหรับการตรวจสอบความปลอดภัย (ตัวอย่างเช่น @requiresrole, @requirespermission ฯลฯ สิ่งนี้ต้องใช้การรวม AOP ฤดูใบไม้ผลิของ Shiro เพื่อสแกนคลาสที่เหมาะสมและดำเนินการตามตรรกะความปลอดภัยหากจำเป็น
<ถั่วขึ้นอยู่กับ = "LifeCycleBeanPostProcessor"/> <bean> <property name = "SecurityManager" ref = "SecurityManager"/> </ebean>
ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่ามันจะเป็นประโยชน์ต่อการเรียนรู้ของทุกคนและฉันหวังว่าทุกคนจะสนับสนุน wulin.com มากขึ้น