2011-05-04 14 views
8

के साथ अपाचे शिरो को कॉन्फ़िगर करना मैं वसंत/वसंत सुरक्षा के बजाय गुइस/शिरो का उपयोग करना शुरू कर रहा हूं। मैंने शिरो साइट से उदाहरण देखे हैं, और सभी कॉन्फ़िगरेशन उदाहरण आईएनआई-फाइल उदाहरणों के रूप में बनाए जाते हैं। क्या साई जावा में शिरो को कॉन्फ़िगर करना संभव है, क्योंकि गुइस सर्वलेट कॉन्फ़िगर करने के लिए हैं?Google Guice Servlet

उत्तर

14

हां यह संभव है, लेकिन यदि आप चाहते हैं कि गुइस आपके क्षेत्र बनाने के लिए कुछ गोंद कोड की आवश्यकता है।

  1. बाइंड क्षेत्र कार्यान्वयन:
bind(Realm.class).to(MyRealm.class).in(Singleton.class); 
  1. बाइंड WebSecurityManager:
@Provides @Singleton WebSecurityManager securityManager(Realm realm) { 
     DefaultWebSecurityManager sm = new DefaultWebSecurityManager(); 
     sm.setRealm(realm); 
     return sm; 
    } 
  1. उपवर्ग Shiro फ़िल्टर में से एक तो आप उपयोग कर सकते हैं Guice WebSecurityManager प्रदान की:
public class SecurityFilter extends IniShiroFilter { 

     static class SecurityManagerFactory extends WebIniSecurityManagerFactory { 

     private final WebSecurityManager securityManager; 

     public SecurityManagerFactory(WebSecurityManager securityManager) { 
      this.securityManager = securityManager; 
     } 

     public SecurityManagerFactory(WebSecurityManager securityManager, Ini ini) { 
      super(ini); 
      this.securityManager = securityManager; 
     } 

     @Override 
     protected SecurityManager createDefaultInstance() { 
      return securityManager; 
     } 
     } 

     private final Provider<WebSecurityManager> securityManager; 

     @Inject 
     SecurityFilter(Provider<WebSecurityManager> securityManager) { 
     super(); 
     this.securityManager = securityManager; 
     } 


     protected Map<String, ?> applySecurityManager(Ini ini) { 
     SecurityManagerFactory factory; 
     if (ini == null || ini.isEmpty()) { 
      factory = new SecurityManagerFactory(securityManager.get()); 
     } else { 
      factory = new SecurityManagerFactory(securityManager.get(), ini); 
     } 
     setSecurityManager((WebSecurityManager) factory.getInstance()); 
     return factory.getBeans(); 
     } 
    } 
  1. अपने फ़िल्टर कॉन्फ़िगर करें:
Joiner lines = Joiner.on("\n"); 
    Map<String, String> config = ImmutableMap.of("config", lines.join(
     "; here you can provide additional ini", 
     "[roles]", 
     "admin = *", 
     "[urls]", 
     "/secure/** = authcBasic" 
    )); 
    filter("/*").through(SecurityFilter.class, config); 
+0

पूर्ण कोड के साथ जवाब के लिए thanx! तो आखिर में कॉन्फ़िगरेशन आईएनआई प्रारूप में होना चाहिए? – newbie

+0

आईएनआई वैकल्पिक है, आप मैन्युअल रूप से प्रदाता विधि में WebSecuirtyManager को कॉन्फ़िगर कर सकते हैं। – sanjary