2015-11-04 11 views
5

मेरे पास वसंत बूट एप्लिकेशन में कॉन्फ़िगर किए गए फ़िल्टर के लिए कोड नीचे है। मेरा दूसरा फ़िल्टर जो बी है, मैं अनुरोध करता हूं जब मैं अनुरोध नहीं करता हूं।वसंत सुरक्षा फ़िल्टर नहीं

import org.springframework.security.config.annotation.web.builders.HttpSecurity; 
import org.springframework.security.config.annotation.web.builders.WebSecurity; 
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; 
import org.springframework.security.config.annotation.web.servlet.configuration.EnableWebMvcSecurity; 

@Configuration 
@EnableWebMvcSecurity 
public class SecurityConfig extends WebSecurityConfigurerAdapter { 
    @Override 
    public void configure(WebSecurity webSecurity) throws Exception { 
     webSecurity.ignoring().antMatchers(HttpMethod.GET, "/health"); 
    } 
    @Override 
    protected void configure(HttpSecurity http) throws Exception { 
     http.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS); 
     http.addFilterBefore(new A(), BasicAuthenticationFilter.class); 
     http.addFilterAfter(new B(), new A().getClass()); 
    } 
} 

import org.springframework.web.filter.GenericFilterBean; 
public class A extends GenericFilterBean { 

    @Override 
    public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2) 
      throws IOException, ServletException { 
     System.out.println("filter A"); 
    } 
} 

import org.springframework.web.filter.GenericFilterBean; 
public class B extends GenericFilterBean { 

    @Override 
    public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2) 
      throws IOException, ServletException { 
     System.out.println("filter B");   
    } 
} 

संपादित करें:

public class A extends GenericFilterBean { 

     @Override 
     public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2) throws IOException, ServletException { 
      System.out.println("filter A Before"); 
      arg2.doFilter(arg0,arg1); 
      System.out.println("filter A After"); 
     } 
} 
+0

क्या आप थोड़ा विस्तार कर सकते हैं। आपको क्या त्रुटि संदेश मिलता है? आपने अपनी समस्या का समाधान करने के लिए पहले से क्या प्रयास किया है? – kebs

+0

अच्छी तरह से कोई त्रुटि नहीं है .. यह केवल फ़िल्टर बी – Harshana

+1

का आह्वान नहीं करता है, न ही यह होगा ... और न ही यह होगा ... आपकी 'doFilter' विधि अनुरोध प्रसंस्करण को रोक देती है। प्रसंस्करण जारी रखने के लिए आपको 'filterchain.doFilter (अनुरोध, प्रतिक्रिया); 'कॉल करना चाहिए। आप उचित प्रसंस्करण तोड़ रहे हैं। –

उत्तर

4

आपका config सही है। लेकिन आपको M. Deinum द्वारा उल्लिखित Filter A से Filter B पर अपना अनुरोध पारित करने की आवश्यकता है। बस काम नहीं कर रहे हैं। आपके कोड में यह arg2.doFilter()Filter A में होना चाहिए।

docs से यह कहते हैं,

इस विधि निम्नलिखित पैटर्न का पालन करेंगे का एक विशिष्ट कार्यान्वयन:

  1. अनुरोध
  2. की जांच वैकल्पिक रूप से एक कस्टम कार्यान्वयन के साथ अनुरोध वस्तु लपेट इनपुट फ़िल्टरिंग के लिए फिल्टर सामग्री या शीर्षलेख
  3. वैकल्पिक रूप से उत्पादन को छानने के लिए फिल्टर सामग्री या हेडर के लिए एक कस्टम कार्यान्वयन के साथ प्रतिक्रिया ऑब्जेक्ट लपेट
  4. या तो श्रृंखला में अगले इकाई FilterChain वस्तु का उपयोग कर आह्वान (chain.doFilter()), या नहीं अनुरोध पर पारित/प्रतिक्रिया जोड़ी अनुरोध श्रृंखला को ब्लॉक करने के लिए फ़िल्टर श्रृंखला में अगली इकाई में प्रसंस्करण
  5. फ़िल्टर श्रृंखला में अगले इकाई के आवेदक के बाद सीधे प्रतिक्रिया पर शीर्षलेख सेट करें।
संबंधित मुद्दे