2012-04-30 27 views
31

पर लॉगिन करता है मेरे पास वसंत सुरक्षा वाला सुरक्षित स्प्रिंग वेब ऐप है, जो ईसी 2 पर चल रहा है। ईसी 2 इंस्टेंस के सामने एक एसएसएल प्रमाण के साथ एक लोचदार लोड बैलेंसर है (https लोड लोडर यानी पोर्ट 443 -> पोर्ट 80 पर समाप्त होता है), इसलिए टॉमकैट के परिप्रेक्ष्य से, इनबाउंड अनुरोध HTTP हैं।एचटीटीपीएस लॉगिन स्प्रिंग सिक्योरिटी के साथ एचटीएमएल

मेरा लॉगिन फॉर्म https को सबमिट करता है, हालांकि बाद में रीडायरेक्ट http (सफलता या विफल) पर जाता है। प्रमाणीकरण सफल रहा था, और मैं वापस https पर जा सकते हैं और मैं में लॉग इन कर रहा हूँ

मेरा प्रवेश विन्यास तो दिखाई देता है:।

<security:form-login 
    default-target-url="/home" 
    login-page="/" 
    login-processing-url="/processlogin" 
    authentication-failure-url="/?login_error=1"/> 

क्या मैं डिफ़ॉल्ट-लक्ष्य-यूआरएल बनाने के लिए बदलने की जरूरत है और प्रमाणीकरण-विफलता-यूआरएल https पर जाएं?

  • बिलाव 6
  • स्प्रिंग सुरक्षा 3.0.x
+0

मैंने औसत समय में अपाचे रीराइट सेट किया है, लेकिन वसंत सुरक्षा कॉन्फ़िगरेशन के भीतर कोई तरीका होने पर अभी भी उत्सुक है। – Thody

+0

आमतौर पर लोड बैलेंसर पर किया जाता है और कॉन्फ़िगरेशन को यूआरएल-रीराइट कहा जाता है। इस तरह लोड बैलेंसर सुनिश्चित करता है कि रीडायरेक्ट https पर रहता है। – Ritesh

उत्तर

1

एक तरह से मैं इस काम के मिला निम्नलिखित config

<http auto-config="true" use-expressions="true" entry-point-ref="authenticationEntryPoint" > 
    <form-login login-page="/login.jsf" authentication-failure-url="/login.jsf?login_error=t" always-use-default-target="true" default-target-url="xxxxx" /> 
    <logout logout-url="/logout" logout-success-url="/logoutSuccess.jsf" /> 
    ... 
</http> 

always-use-default-target="true" और default-target-url="https://...." जोड़ने के लिए था जोड़कर है। आदर्श तरीका नहीं है क्योंकि आपको कॉन्फ़िगरेशन में यूआरएल को हार्ड कोड करने की आवश्यकता है।

0

मैं सभी इंटरसेप्ट-यूआरएल पर आवश्यक-चैनल = "कोई" सेट करता हूं। यह अभी भी मेरे देव पर्यावरण में काम करने की अनुमति देता है जहां मैं एसएसएल का उपयोग नहीं करता हूं।

<intercept-url pattern="/createUser" access="permitAll" requires-channel="any"/> 
<intercept-url pattern="/admin/**" access="hasRole('ROLE_ADMIN')" requires-channel="any"/> 
<intercept-url pattern="/**" access="isAuthenticated()" requires-channel="any"/> 

फिर, एक अपाचे वर्चुअल होस्ट बनाएं जो सभी ट्रैफ़िक को HTTPS संस्करण पर रीडायरेक्ट करता है।

<VirtualHost *:80> 
    ServerName www.mywebsite.com 
    Redirect permanent/https://www.mywebsite.com/ 
</VirtualHost> 
+5

लॉगिन के बाद, वसंत अभी भी एक http पते के साथ एक स्थान शीर्षलेख भेज देगा। उपयोगकर्ता नोटिस नहीं करेगा, क्योंकि आपका अपाचे तुरंत उसे https पर रीडायरेक्ट करेगा, लेकिन यह अभी भी एक गंभीर सुरक्षा समस्या है, क्योंकि ब्राउज़र एक असुरक्षित चैनल पर सत्र कुकीज़ भेज देगा। – marcelj

+0

@marcelj - मैंने बस इसे फायरबग के माध्यम से चलाया और आप सही हैं। मैं एक बेहतर समाधान जानने की कोशिश करूंगा और यदि मैं करता हूं तो मेरा जवाब संशोधित करें। –

+0

@marcelj, क्या आप समझा सकते हैं कि यह एक गंभीर सुरक्षा जोखिम क्यों है या जोखिम का वर्णन करने वाला संदर्भ प्रदान करता है? –

19

आपकी वसंत कॉन्फ़िगरेशन प्रयुक्त प्रोटोकॉल के लिए अज्ञेयवादी होना चाहिए। यदि आप "आवश्यकता-चैनल" जैसे कुछ का उपयोग करते हैं, तो आप जल्दी या बाद में समस्याओं में भाग लेंगे, खासकर यदि आप उसी एप्लिकेशन को https के बिना विकास वातावरण में तैनात करना चाहते हैं।

इसके बजाय, अपने टोमकैट को ठीक से कॉन्फ़िगर करने पर विचार करें। आप इसे RemoteIpValve के साथ कर सकते हैं। जो के आधार पर हेडर loadbalancer भेजता है, अपनी server.xml विन्यास कुछ इस तरह शामिल करने के लिए की जरूरत है:

<Valve 
    className="org.apache.catalina.valves.RemoteIpValve" 
    internalProxies=".*" 
    protocolHeader="X-Forwarded-Proto" 
    httpsServerPort="443" 
    /> 

स्प्रिंग ServletRequest के आधार पर पूर्ण रीडायरेक्ट पते का निर्धारण करेगा, ताकि आप की तुलना में कुछ और ही उपयोग कर रहे हैं बदलने के httpsServerPort 443:

httpsServerPort बंदरगाह ServletRequest.getServerPort() द्वारा दिया जब protocolHeader इंगित करता है https प्रोटोकॉल

0

मुझे भी वही समस्या का सामना करना पड़ रहा है और जब तक मुझे उचित समाधान नहीं मिलता है, तब तक मैं प्रॉक्सी सर्वर से अपने अनुरोधों को HTTP के बजाय एजेपी पर टॉमकैट सर्वर पर रीडायरेक्ट कर रहा हूं। नीचे मेरी अपाचे विन्यास वेब में कोड की लाइनों के नीचे

ProxyPass /myproject ajp://localhost:8009/myproject 
ProxyPassReverse /myproject ajp://localhost:8009/myproject 
0

इस्तेमाल होता है।xml

<security-constraint> 
    <web-resource-collection> 
    <web-resource-name>Login and Restricted Space URLs</web-resource-name> 
    <url-pattern>/j_security_check</url-pattern> 
    <url-pattern>/loginpage.rose</url-pattern> 
    </web-resource-collection> 
    <user-data-constraint> 
    <transport-guarantee>CONFIDENTIAL</transport-guarantee> 
    </user-data-constraint> 
</security-constraint> 

यह HTTPS का उपयोग करने के लिए मजबूर हो जाता है।

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