मैंने अपने स्प्रिंग बूट एप्लिकेशन में togglz लागू किया है। मैं Togglz कंसोल तक भी पहुंच सकता हूं, और मैंने फीचरमैनेजर के साथ प्रतिबंधों का परीक्षण किया है। हालांकि, अगर मैं togglz कंसोल पर जाता हूं और सक्रियण रणनीति बदलने या किसी सुविधा को सक्षम/अक्षम करने का प्रयास करता हूं, तो मुझे 403 निषिद्ध त्रुटि पृष्ठ मिलता है।

दूसरे शब्दों में, मैं /togglz/index तक पहुंच सकता हूं लेकिन मैं एक्सेस/कॉल/togglz/संपादित नहीं कर सकता

मेरे WebMvcConfigurer वर्ग में:

@Bean
public FilterRegistrationBean<TogglzFilter> togglzRegistration() {
    FilterRegistrationBean<TogglzFilter> reg = new FilterRegistrationBean<>();
    reg.setFilter(new TogglzFilter());
    reg.addUrlPatterns("/*");
    reg.setName("TogglzFilter");
    return reg;
}

@Bean
public ServletRegistrationBean<TogglzConsoleServlet> togglzConsoleServlet() {
    ServletRegistrationBean<TogglzConsoleServlet> reg = new ServletRegistrationBean<>();
    reg.setServlet(new TogglzConsoleServlet());
    reg.setName("TogglzConsoleServlet");
    reg.addUrlMappings("/togglz/*");
    return reg;
}

मेरे Togglz कॉन्फ़िगरेशन में:

@Component
public class TogglzConfiguration implements TogglzConfig {
private static final Logger LOGGER = LoggerFactory.getLogger(TogglzConfiguration.class);

@Autowired
private ResourceLoader resourceLoader;

@Override
public Class<? extends Feature> getFeatureClass() {
    return Features.class;
}

@Override
public StateRepository getStateRepository() {
    try {
        return new FileBasedStateRepository(
                resourceLoader.getResource("classpath:/togglz.properties").getFile()
                );
    } catch (IOException ex) {
        LOGGER.error(ex.getMessage(),ex);
        throw new RuntimeException(ex);
    }

}

@Override
public UserProvider getUserProvider() {

    return new UserProvider() {
        @Override
        public FeatureUser getCurrentUser() {
                return new SimpleFeatureUser("admin", true);
        }
    };
}


}

मेरी विशेषताएं वर्ग:

public enum Features implements Feature {

@Label("Inventory Initiation")
@TestingUI
TESTING_UI_INITIATE_INVENTORY,

@Label("Random Warehouse Creation")
@TestingUI
TESTING_UI_CREATE_WAREHOUSE
;


public boolean isActive() {
    return FeatureContext.getFeatureManager().isActive(this);
}

}
1
E. Ancuta 26 जुलाई 2018, 11:30
Togglz कंसोल स्प्रिंग सिक्योरिटी और दोस्तों द्वारा प्रदान किए गए CSRF टोकन का समर्थन करता है। मैं सोच सकता था कि यह आपके लिए कुछ मुद्दों का कारण बनता है। देखें: github.com/togglz/togglz/blob/master/console/src/main/java/org/…
 – 
chkal
28 जुलाई 2018, 10:06
तो मुझे लगता है कि ऐसा हो सकता है यदि आपके पास कुछ सीएसआरएफ सुरक्षा है जो टॉगलज़ के साथ एकीकृत नहीं है ...
 – 
chkal
28 जुलाई 2018, 10:11
वास्तव में हम करते हैं! यह बहुत कुछ समझाएगा कि कंसोल क्यों पहुंच योग्य है लेकिन संपादन अनुरोध (यदि यह आरईएसटी या जो कुछ भी है) ट्रिगर नहीं करता है। क्या आपके पास togglz के साथ कार्यान्वयन के लिए कोई उदाहरण या दस्तावेज़ीकरण है? प्रतिक्रिया के लिए धन्यवाद, यह बहुत मायने रखता है
 – 
E. Ancuta
30 जुलाई 2018, 08:51
विलंब के लिए क्षमा चाहते हैं। मेरा जवाब नीचे देखें।
 – 
chkal
4 अगस्त 2018, 09:53

4 जवाब

सबसे बढ़िया उत्तर

ऐसा लगता है कि आप अपने आवेदन में किसी प्रकार की सीएसआरएफ सुरक्षा का उपयोग कर रहे हैं। कम से कम यह समझाएगा कि केवल POST अनुरोध क्यों टूटे हैं।

Togglz कंसोल CSRF टोकन प्राप्त करने के लिए एक SPI प्रदान करता है जिसे प्रपत्रों में एम्बेड करने की आवश्यकता होती है:

https://github.com/togglz/togglz/blob/master/servlet/src/main/java/org/togglz/servlet/spi/CSRFTokenProvider.java

स्प्रिंग सुरक्षा CSRF सुरक्षा के लिए समर्थन के साथ Togglz जहाज:

https://github.com/togglz/togglz/blob/master/spring-security/src/main/java/org/togglz/spring/security/SpringSecurityTokenProvider.java

Togglz प्रदाताओं को खोजने के लिए JDK की ServiceLoader सुविधा का उपयोग कर रहा है। तो वसंत सुरक्षा के मामले में कार्यान्वयन वर्ग को संदर्भित करने वाली एक फ़ाइल है:

https://github.com/togglz/togglz/blob/master/spring-security/src/main/resources/META-INF/services/org.togglz.servlet.spi.CSRFTokenProvider

इसलिए यदि आप किसी तृतीय पक्ष CSRF सुरक्षा ढांचे को Togglz के साथ एकीकृत करना चाहते हैं, तो आपको यह करना होगा:

  • लागू करें CSRFTokenProvider
  • अपने वर्गपथ में एक फ़ाइल META-INF/services/org.togglz.servlet.spi.CSRFTokenProvider जोड़ें और उसमें कार्यान्वयन वर्ग का पूर्णतः योग्य वर्ग नाम जोड़ें।
1
chkal 4 अगस्त 2018, 09:53
मेरे पास वसंत सुरक्षा द्वारा सीएसआरएफ चालू था और एक ही समस्या थी। मुझे सिर्फ निर्भरता जोड़ने की जरूरत थी org.togglz:togglz-spring-security और इससे मदद मिली।
 – 
Roman T
24 मई 2019, 14:59

आपके पास application.yml में togglz के लिए कौन सा कॉन्फ़िगरेशन है? सबसे अधिक संभावना है कि आप वहां secure: false खो रहे हैं:

togglz:
  enabled: true
  console:
    enabled: true
    secured: false
0
Rui Figueira 26 जुलाई 2018, 16:20
नहीं, यह कुछ भी नहीं बदलता है। मुझे ध्यान देना चाहिए कि यूआरएल जो मुझे 403 पैदा कर रहा है वह/togglz/index नहीं बल्कि/togglz/edit है
 – 
E. Ancuta
27 जुलाई 2018, 04:11
आप togglz स्प्रिंग बूट स्टार्टर का उपयोग नहीं कर रहे हैं, इसलिए कॉन्फ़िगरेशन काम नहीं कर रहा है। मैं अत्यधिक अनुशंसा करता हूं कि आप इसके बजाय togglz-spring-boot-starter का उपयोग करें: togglz.org/ दस्तावेज़ीकरण/स्प्रिंग-बूट-स्टार्टर.html
 – 
Rui Figueira
27 जुलाई 2018, 11:01
तुम सही हो, मैं नहीं हूँ। लेकिन ऐसा इसलिए है क्योंकि टॉगलज़-वसंत-बूट-स्टार्टर वसंत सुरक्षा वर्ग पर निर्भर है और मेरी सेवा वसंत सुरक्षा का उपयोग नहीं करती है, लेकिन सभी सेवाओं में एकल साइन के लिए OAuth2
 – 
E. Ancuta
27 जुलाई 2018, 11:45
रुको, स्प्रिंगसिक्योरिटी यूज़रप्रोवाइडर क्लास एक टॉगल क्लास है, यदि संभव हो तो मैं इसे लागू करने पर ध्यान दूंगा, मॉड्यूल @ConditionalOnMissingClass org.springframework.security.config.annotation.web.configuration.EnableWebSecurity है जो मेरे पास है
 – 
E. Ancuta
27 जुलाई 2018, 11:52

मैंने गुण फ़ाइल के माध्यम से togglz में सीएसआरएफ सुरक्षा को अक्षम कर दिया है:

togglz.console.validate-c-s-r-f-token=false

यदि आप गुण फ़ाइलों के बजाय yaml का उपयोग करते हैं, तो फ़ाइल इस तरह दिखनी चाहिए:

...
togglz:
  console:
    validate-c-s-r-f-token: false

आपको ध्यान देना चाहिए कि सीएसआरएफ टोकन सत्यापन को अक्षम करने की अनुशंसा नहीं की जाती है, क्योंकि यह आपके आवेदन की सुरक्षा को कम कर देगा।

0
wulfovitch 29 मार्च 2021, 19:33

मेरा भी यही विचार है। चूंकि मैं जावा और स्प्रिंग में नौसिखिया हूं इसलिए @chkal समाधान से CSRFTokenProvider को लागू करने का प्रयास करते समय मैं अटक गया।

इसलिए मैंने एक सुविधा को सक्षम/अक्षम करने के लिए Togglz API को हिट किया। दोनों HTML सामग्री के साथ 200 OK लौटाते हैं (togglz कंसोल से इंडेक्स पेज के समान)।

सक्षम

curl --location --request POST '{host}/{context_path}/togglz-console/edit?f=FEATURE_ONE&enabled=enabled'

अक्षम करना

curl --location --request POST '{host}/{context_path}/togglz-console/edit?f=FEATURE_ONE'

Application.yml

...

togglz:
  console:
    enabled: true
    path: /togglz-console
    secured: false
    use-management-port: false
  features:
    FEATURE_ONE:
      enabled: true

बिल्ड.ग्रेडल

...

  implementation "org.togglz:togglz-spring-boot-starter:2.6.1.Final"
  implementation "org.togglz:togglz-console:2.6.1.Final"
  implementation "org.togglz:togglz-spring-security:2.6.1.Final"

नोट: यह उपरोक्त प्रश्न का उत्तर नहीं दे रहा है, लेकिन एक विकल्प हो सकता है

अद्यतन: मैं इसका अनुभव कर रहा था क्योंकि मेरा इनपुटस्ट्रीम पढ़ा गया है (फ़िल्टर बीन द्वारा) और केवल एक बार पढ़ा गया है

0
Tri Asmoro 8 अप्रैल 2021, 07:08