में एक खाली फ़िल्टर सूची है, आरईएसटी सेवाओं के साथ एक स्प्रिंग बूट ऐप को कुछ सेवाओं तक सार्वजनिक पहुंच की अनुमति है, जबकि केवल अधिकृत उपयोगकर्ताओं को अन्य सेवाओं को प्रतिबंधित करना है। एक 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=true
application.properties
में सभी एंडपॉइंट्स खोलने के लिए सेट करने का सुझाव देता है। इससे मुझे this documentation page from Spring about endpoints मिल गया, जो को application.properties
में सेट करने का सुझाव देता है, जहां name
अंत बिंदु का नाम बदल रहा है। लेकिन endpoints.api-url.sensitive=false
application.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
एक खाली फ़िल्टर सूची कोई त्रुटि नहीं है (आपने इसे अनदेखा करने के लिए कहा है)। वसंत सुरक्षा 403 नहीं भेज रही है। आपको यह पता लगाना होगा कि वह कहां से आता है (शायद पंजीकरण सेवा के अंदर)? –
@ डेवसेयर आपको बहुत बहुत धन्यवाद। क्या आप सुझाव दे सकते हैं कि यह निर्धारित करने के लिए कि संदेश कहां से आता है? शायद एक लिंक? मैं पूरे दिन इस दिन काम करने पर खर्च करने की योजना बना रहा हूं। – CodeMed
आपके पास पहले से ही वसंत सुरक्षा के लिए DEBUG लॉग हैं इसलिए यदि आप इसे नहीं देखते हैं तो मेरे पास कोई सुझाव नहीं है, क्षमा करें। शायद आपको एक साधारण नमूना परियोजना बनाना चाहिए। –