2014-09-21 11 views
21

में फ़िल्टर ऑर्डर मैं वसंत-बूट में अपने फ़िल्टर का ऑर्डर कैसे निर्दिष्ट कर सकता हूं? स्प्रिंग सुरक्षा फ़िल्टर के बाद मुझे अपना एमडीसी फ़िल्टर डालना होगा। मैंने लगभग हर चीज की कोशिश की लेकिन मेरा फ़िल्टर हमेशा पहले था। यह काम नहीं किया:वसंत-बूट

@Bean 
@Order(Ordered.LOWEST_PRECEDENCE) 
public UserInsertingMdcFilter userInsertingMdcFilter() { 
    return new UserInsertingMdcFilter(); 
} 

यह भी काम नहीं किया:

वसंत से
@Bean 
public FilterRegistrationBean userInsertingMdcFilterRegistrationBean() { 
    FilterRegistrationBean registrationBean = new FilterRegistrationBean(); 
    UserInsertingMdcFilter userFilter = new UserInsertingMdcFilter(); 
    registrationBean.setFilter(userFilter); 
    registrationBean.setOrder(Integer.MAX_VALUE); 
    return registrationBean; 
} 
+2

'क्योंकि' Ordered.LOWEST_PRECEDENCE = Integer.Max' और पूर्णांक @Order (Ordered.LOWEST_PRECEDENCE + 100) 'काम नहीं करेगा। अधिकतम + 100 = कुछ नकारात्मक संख्या, इसका मतलब यह होगा कि – Ralph

+0

@ राल्फ - मैंने सफलता के बिना ईवेंट '@Order (Ordered.LOWEST_PRECEDENCE)' भी कोशिश की। – igo

+0

वसंत बूट का कौन सा संस्करण? क्या आपने 1.1.7 कोशिश की? –

उत्तर

21

दोस्तों फिर से मदद की। https://github.com/spring-projects/spring-boot/issues/1640 और https://jira.spring.io/browse/SEC-2730

स्प्रिंग सुरक्षा फ़िल्टर सेम है कि यह बनाता है पर एक आदेश निर्धारित नहीं करता है देखें। इसका अर्थ यह है कि, जब बूट फ़िल्टर पंजीकरण को इसके लिए बना रहा है, तो यह डिफ़ॉल्ट आदेश प्राप्त होता है जो LOWEST_PRECEDENCE है।

यदि आप स्प्रिंग सिक्योरिटी के बाद अपना खुद का फ़िल्टर जाना चाहते हैं तो आप स्प्रिंग सिक्योरिटी के फ़िल्टर के लिए अपना पंजीकरण बना सकते हैं और ऑर्डर निर्दिष्ट कर सकते हैं।

तो मेरे सवाल का जवाब है:

@Bean 
public FilterRegistrationBean securityFilterChain(@Qualifier(AbstractSecurityWebApplicationInitializer.DEFAULT_FILTER_NAME) Filter securityFilter) { 
    FilterRegistrationBean registration = new FilterRegistrationBean(securityFilter); 
    registration.setOrder(Integer.MAX_VALUE - 1); 
    registration.setName(AbstractSecurityWebApplicationInitializer.DEFAULT_FILTER_NAME); 
    return registration; 
} 

@Bean 
public FilterRegistrationBean userInsertingMdcFilterRegistrationBean() { 
    FilterRegistrationBean registrationBean = new FilterRegistrationBean(); 
    UserInsertingMdcFilter userFilter = new UserInsertingMdcFilter(); 
    registrationBean.setFilter(userFilter); 
    registrationBean.setOrder(Integer.MAX_VALUE); 
    return registrationBean; 
} 
+0

https://github.com/spring-projects/spring-boot/issues/677 और https://github.com/spring-projects में भी चर्चा देखें/वसंत-बूट/मुद्दों/1640 –

+2

निश्चित रूप से LOWEST_PRECEDENCE का अर्थ है * सबकुछ * इसके बाद चला जाता है ... – OrangeDog

+1

पुष्टि करने के लिए धन्यवाद। यह बहुत अनजान लगता है, सबसे कम प्राथमिकता का मतलब है कि अनुरोध द्वारा सामना किया जाने वाला पहला फ़िल्टर है। – LearnToLive

8

यह वसंत बूट 1.2 में तय हुई थी। सुरक्षा श्रृंखला अब 0 ऑर्डर करने के लिए डिफ़ॉल्ट है।

यह भी गुण के माध्यम से स्थापित किया जा सकता:

security.filter-order=0 # Security filter chain order. 

https://github.com/spring-projects/spring-boot/issues/1640

+2

स्प्रिंग बूट 1.3.x में यह 'SecurityProperties.DEFAULT_FILTER_ORDER' है और' फ़िल्टर पंजीकरण है Bean.REQUEST_WRAPPER_FILTER_MAX_ORDER \t - 100' या बस '-100'। – gavenkoa