2016-04-07 8 views
6

में एक खाली फ़िल्टर सूची है, आरईएसटी सेवाओं के साथ एक स्प्रिंग बूट ऐप को कुछ सेवाओं तक सार्वजनिक पहुंच की अनुमति है, जबकि केवल अधिकृत उपयोगकर्ताओं को अन्य सेवाओं को प्रतिबंधित करना है। एक configure(WebSecurity web) पद्धति के रूप में नीचे दिखाया गया SecurityConfig वर्ग के लिए जोड़ा जाता है, एक 403 error उपयोगकर्ता के वेब ब्राउज़र को भेजा जाता है, और स्प्रिंग बूट लॉग फाइल है कि बताते हुए एक त्रुटि दे:/api-url में स्प्रिंग बूट सुरक्षा

/registration-form has an empty filter list 

क्या विशिष्ट परिवर्तन करने की आवश्यकता है /registration-form सेवा को अज्ञात/गैर-प्रमाणीकृत उपयोगकर्ताओं सहित किसी भी उपयोगकर्ता को सफलतापूर्वक सेवा प्रदान करने के लिए नीचे दिए गए कोड में बनाया गया है?

यहाँ SecurityConfig वर्ग है:

@Configuration 
@Order(SecurityProperties.ACCESS_OVERRIDE_ORDER) 
@EnableWebSecurity 
@EnableGlobalMethodSecurity(prePostEnabled = true) 
protected static class SecurityConfiguration extends WebSecurityConfigurerAdapter { 

    @Override 
    public void configure(WebSecurity webSecurity) throws Exception { 
     webSecurity.ignoring().antMatchers("/registration-form"); 
    } 

    @Override 
    protected void configure(HttpSecurity http) throws Exception { 
     http 
      .formLogin() 
       .and() 
      .httpBasic().and() 
      .authorizeRequests() 
       .antMatchers("/login1").permitAll() 
       .antMatchers("/login2").permitAll() 
       .anyRequest().authenticated(); 
    } 
} 

और यहाँ संपूर्ण लॉग है:

<dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-security</artifactId> 
    </dependency> 
:

2016-04-07 16:42:18.548 INFO 8937 --- [nio-8001-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/]  : Initializing Spring FrameworkServlet 'dispatcherServlet' 
2016-04-07 16:42:18.548 INFO 8937 --- [nio-8001-exec-1] o.s.web.servlet.DispatcherServlet  : FrameworkServlet 'dispatcherServlet': initialization started 
2016-04-07 16:42:18.656 INFO 8937 --- [nio-8001-exec-1] o.s.web.servlet.DispatcherServlet  : FrameworkServlet 'dispatcherServlet': initialization completed in 108 ms 
2016-04-07 16:42:18.702 DEBUG 8937 --- [nio-8001-exec-1] o.s.s.w.u.matcher.AntPathRequestMatcher : Checking match of request : '/registration-form'; against '/css/**' 
2016-04-07 16:42:18.702 DEBUG 8937 --- [nio-8001-exec-1] o.s.s.w.u.matcher.AntPathRequestMatcher : Checking match of request : '/registration-form'; against '/js/**' 
2016-04-07 16:42:18.702 DEBUG 8937 --- [nio-8001-exec-1] o.s.s.w.u.matcher.AntPathRequestMatcher : Checking match of request : '/registration-form'; against '/images/**' 
2016-04-07 16:42:18.702 DEBUG 8937 --- [nio-8001-exec-1] o.s.s.w.u.matcher.AntPathRequestMatcher : Checking match of request : '/registration-form'; against '/**/favicon.ico' 
2016-04-07 16:42:18.702 DEBUG 8937 --- [nio-8001-exec-1] o.s.s.w.u.matcher.AntPathRequestMatcher : Checking match of request : '/registration-form'; against '/error' 
2016-04-07 16:42:18.702 DEBUG 8937 --- [nio-8001-exec-1] o.s.s.w.u.matcher.AntPathRequestMatcher : Checking match of request : '/registration-form'; against '/registration-form' 
2016-04-07 16:42:18.702 DEBUG 8937 --- [nio-8001-exec-1] o.s.security.web.FilterChainProxy  : /registration-form has an empty filter list 

pom.xml में, सुरक्षा के लिए केवल संदर्भ पीछा कर रहा है

मैंनेमें संस्करण संख्या के लिए चारों ओर देखा, और निकटतम बात मैं मिल सकता था:

<parent> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-starter-parent</artifactId> 
    <version>1.3.0.RELEASE</version> 
    <relativePath /> <!-- lookup parent from repository --> 
</parent> 

चल रहे शोध:


1.) This other post, WebSecurity और HttpSecurity के बीच अंतर का एक अच्छा विवरण देता है और इस प्रकार बताता है कि मैंने ऊपर दिखाए गए कोड में WebSecurity और HttpSecurity दोनों को क्यों शामिल किया था।

2.) This 2012 post describes a similar error and solution, लेकिन सामान्य रूप से xml configuration का उपयोग कर वसंत सुरक्षा के पुराने संस्करण पर केंद्रित है, और Java Configuration के साथ वसंत बूट के लिए विशिष्ट नहीं है।

3.) This blog entry explains that old xml config files like web.xml are largely replaced by the new application.properties file in Spring Boot। इसलिए मुझे यकीन नहीं है कि वर्तमान समस्या का समाधान application.properties जोड़ने या वसंत सुरक्षा के लिए कुछ जावा कॉन्फ़िगर जोड़ने में है या नहीं।

4.) This blog entry एक ServletContextInitializer सेम जो समाप्त मुद्दा यह है कि एक स्प्रिंग बूट नियंत्रक कक्षा में @RequestMapping एनोटेशन द्वारा वर्णित किया गया था करने के लिए एक फिल्टर कहते हैं सुई @Bean एनोटेशन का उपयोग कर का वर्णन है। उदाहरण एक बहु-भाग फ़ाइल फ़िल्टर है, लेकिन मुझे आश्चर्य है कि इस दृष्टिकोण का उपयोग वर्तमान ओपी त्रुटि संदेश को हल करने के लिए उचित फ़िल्टर जोड़ने के लिए किया जा सकता है।

5.) This 2014 posting describes two approaches to customizing the behavior of a ServletContextInitializer in Spring Boot। एक दृष्टिकोण Application.java वर्ग SpringBootServletInitializer का विस्तार करना है और फिर configure() और onStartup() विधियों को ओवरराइड करना है। दिखाया गया दूसरा दृष्टिकोण server नामस्थान का उपयोग कर application.properties फ़ाइल में लाइनों को जोड़ना है। application.properties में सेट की जा सकने वाली सामान्य गुणों की एक सूची at this link दी गई है, लेकिन मैं यह निर्धारित नहीं कर सका कि वर्तमान ओपी द्वारा परिभाषित समस्या को हल करने के लिए कौन से गुण सेट किए जाएंगे।

6।) @ डेवसियर का जवाब this related questionendpoints.info.sensitive=trueapplication.properties में सभी एंडपॉइंट्स खोलने के लिए सेट करने का सुझाव देता है। इससे मुझे this documentation page from Spring about endpoints मिल गया, जो को application.properties में सेट करने का सुझाव देता है, जहां name अंत बिंदु का नाम बदल रहा है। लेकिन endpoints.api-url.sensitive=falseapplication.properties में समस्या को हल नहीं करता है, और ग्रहण चेतावनी देता है कि endpoints.api-url.sensitive=false is an unknown property। क्या मुझे कहीं और संपत्ति मैपिंग को परिभाषित करना है, या शायद endpoints./api-url.sensitive=false बनाने के लिए / जोड़ें? मैं /api-url एंडपॉइंट के लिए उपयोग करने के लिए सही नाम कैसे प्राप्त कर सकता हूं, और क्या यह इस समस्या को हल करने का सही दृष्टिकोण है?

7.) मैं this other posting पढ़ा है, और एक Filter Registration Bean स्प्रिंग बूट एप्लिकेशन की मुख्य Application वर्ग के भीतर बनाने के लिए अपने उदाहरण का इस्तेमाल किया है, लेकिन डीबग लॉग अभी भी वही संदेश है कि /api-url has an empty filter list का संकेत दिखा।

@Bean 
public FilterRegistrationBean shallowEtagHeaderFilter() { 
    FilterRegistrationBean registration = new FilterRegistrationBean(); 
    registration.setFilter(new ShallowEtagHeaderFilter()); 
    registration.setDispatcherTypes(EnumSet.allOf(DispatcherType.class)); 
    registration.addUrlPatterns("/api-url"); 
    return registration; 
} 

इस शोध से संभव दृष्टिकोण में शामिल हैं:: यहाँ कोड है कि मैं Application वर्ग को जोड़ा गया है

1.) adding something to `application.properties` 
2.) adding `@Bean` annotation to inject a `ServletContextInitializer` 
3.) adding some Spring Security config using Java Configuration. 
4.) having Application.java extend SpringBootServletInitializer and 
     then overriding methods. 
5.) adding @Bean annotation to add a filter registration bean 
+0

एक खाली फ़िल्टर सूची कोई त्रुटि नहीं है (आपने इसे अनदेखा करने के लिए कहा है)। वसंत सुरक्षा 403 नहीं भेज रही है। आपको यह पता लगाना होगा कि वह कहां से आता है (शायद पंजीकरण सेवा के अंदर)? –

+0

@ डेवसेयर आपको बहुत बहुत धन्यवाद। क्या आप सुझाव दे सकते हैं कि यह निर्धारित करने के लिए कि संदेश कहां से आता है? शायद एक लिंक? मैं पूरे दिन इस दिन काम करने पर खर्च करने की योजना बना रहा हूं। – CodeMed

+0

आपके पास पहले से ही वसंत सुरक्षा के लिए DEBUG लॉग हैं इसलिए यदि आप इसे नहीं देखते हैं तो मेरे पास कोई सुझाव नहीं है, क्षमा करें। शायद आपको एक साधारण नमूना परियोजना बनाना चाहिए। –

उत्तर

1

यह मैं क्या है जहां मैं कुछ यूआरएल को प्रतिबंधित करने और कुछ सार्वजनिक कर रहे हैं

@Override 
     public void configure(HttpSecurity http) throws Exception { 
      http.csrf().disable() 
       .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS) 
       .and() 
       .authorizeRequests() 
       .antMatchers(actuatorEndpoints()).hasRole(userConfig.getAdminRole()) 
       .antMatchers(HttpMethod.OPTIONS, "/**").permitAll() 
       .antMatchers("/signup", 
          "/payment/confirm", 
          "/api/address/zipcodes/**", 
          "/user/password/reset", 
          "/user/password/change", 
          "/user/email/verify", 
          "/password/update", 
          "/email/verify", 
          "/new-products/**").permitAll() 
       .antMatchers("/api/**", "/files/**").authenticated(); 
     } 
+0

इसका परिणाम सर्वलेट के अंदर नियंत्रण प्रवाह नहीं मिला। इसके बजाए, उसने उपयोगकर्ता को 'ROLE_ANONYMOUS' के रूप में लेबल किया और मेरे ओपी में ऊपर दिखाए गए मेरे ** ओंगोज़िंग रिसर्च ** अनुभाग में '1.) में दिखाए गए कारणों के लिए सर्वलेट तक पहुंच अस्वीकार कर दी। – CodeMed

+0

'/ url-pattern' को स्थानांतरित करने के अलावा, आपके कोड में किए गए एकमात्र परिवर्तन को एक पंक्ति को टिप्पणी करना था: // // antMatchers (actuatorEndpoints()) हैरोल (userConfig.getAdminRole()) ' – CodeMed

0

मुझे लगता है कि आपने जो किया है उसे संरक्षित संसाधन/त्रुटि को देखा गया है। या तो इसे खोलें या @EnableWebSecurity का उपयोग करना बंद करें (यह कुछ सामान बंद करता है जो वसंत बूट आपके लिए अन्यथा करता था)।

+0

इन सुझावों ने समस्या का समाधान नहीं किया। हालांकि, मैं आपके अन्य कोड उदाहरणों में से एक का पालन करके बड़े लक्ष्य का पीछा कर रहा हूं। – CodeMed

+0

मैं आपके द्वारा व्यक्तिगत रूप से विकसित किए गए ऐप को विघटित करके एक ही समस्या का सामना कर रहा हूं। क्या आप इसके बारे में एक प्रश्न को देखने के इच्छुक हैं? यहां लिंक है: http://stackoverflow.com/questions/36655518/disable-confirmation-page-in-spring-oauth2 – CodeMed

संबंधित मुद्दे