2011-07-18 21 views
7

के पीछे आवश्यक चैनल = "https" हम एसएसएल कनेक्शन को समाप्त करने और वसंत सक्षम अनुप्रयोग के साथ एप्लिकेशन सर्वर पर सादे HTTP द्वारा कनेक्ट करने के लिए एक F5 बिग-आईपी डिवाइस का उपयोग कर रहे हैं। इसके अलावा हमने एक्स-फॉरवर्ड-प्रोटो हेडर को http या https के साथ मान के रूप में F5 कॉन्फ़िगर किया है।वसंत सुरक्षा: एसएसएल त्वरक

अब हम एक अवरोधन यूआरएल कॉन्फ़िगर करके HTTPS लागू करने के लिए करना चाहते हैं:

<security:intercept-url pattern="/login.action" requires-channel="https" /> 

लेकिन यह केवल काम करता है अगर सर्वलेट containter में प्रोटोकॉल योजना HTTPS है, इसलिए हम HTTP शीर्ष लेख की व्याख्या करने की जरूरत है।

कोई विचार यह कैसे करना है?

धन्यवाद साइमन

उत्तर

8

उपवर्ग SecureChannelProcessor और InsecureChannelProcessor अधिभावी decide()। आप सुरक्षित के लिए उदाहरण के लिए कॉपी करने के लिए और कुछ कोड पेस्ट की आवश्यकता होगी:

@Override 
    public void decide(FilterInvocation invocation, Collection<ConfigAttribute> config) throws IOException, ServletException { 
     Assert.isTrue((invocation != null) && (config != null), 
         "Nulls cannot be provided"); 

     for (ConfigAttribute attribute : config) { 
      if (supports(attribute)) { 
       if (invocation.getHttpRequest(). 
         getHeader("X-Forwarded-Proto").equals("http")) { 
        entryPoint.commence(invocation.getRequest(), 
         invocation.getResponse()); 
       } 
      } 
     } 
    } 

फिर एक BeanPostProcessor का उपयोग कर ChannelDecisionManagerImpl सेम पर इन ChannelProcessors निर्धारित किया है।

1

मुझे पता है कि यह प्रश्न/उत्तर 4 साल पुराना है, लेकिन यह मेरी समस्या का हल ढूंढने में मेरी सहायता करता है। लेकिन आधुनिक वसंत बूट अनुप्रयोगों में, फिक्स आसान है। बस अपने application.yaml में निम्नलिखित प्रविष्टि जोड़ने:

server.tomcat.protocol_header: x-forwarded-proto

मोर यहाँ जानकारी: http://docs.spring.io/spring-boot/docs/current/reference/html/howto-security.html#howto-enable-https

+1

मैं इस की कोशिश की, लेकिन यह केवल आप एम्बेडेड बिलाव उदाहरण का उपयोग कर रहे हैं, और एक बाहरी बिलाव उदाहरण पर एक युद्ध के रूप में एक आवेदन की तैनाती नहीं करता है, तो काम करने के लिए लगता है। –

0

यहां तक ​​कि आजकल सरल:

server.use-forward-headers: true 

बादल फाउंड्री और Heroku लिए डिफ़ॉल्ट रूप से सक्षम किया गया, लेकिन नहीं करने के लिए एडब्ल्यूएस जैसे अन्य।

प्रलेखन (खंड 73.7): https://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/html/howto-embedded-servlet-containers.html

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