2012-01-10 10 views
5

मैं अपने वसंत + हाइबरनेट + वसंत-सुरक्षा और टाइल्स 2 - "हैलोवर्ल्ड" एप्लिकेशन को this guide (दुर्भाग्य से जर्मन में) के बाद काम करने की कोशिश कर रहा हूं।j_spring_security_check 404 अंक

मेरी समस्या यह है कि मुझे अपने आवेदन में लॉग इन करते समय त्रुटि संदेश "404" मिलता है। लॉगिन पेज के लिए पुनर्निर्देशन इरादे के रूप में काम करता है, लेकिन जब मैं लॉगिन बटन दबाता हूं तो मैं "http://localhost:8080/App/j_spring_security_check" तक नहीं पहुंच सकता।

मेरे web.xml इस तरह दिखता है:

<context-param> 
    <param-name>contextConfigLocation</param-name> 
    <param-value> 
     /WEB-INF/defs/applicationContext.xml 
     /WEB-INF/defs/applicationContext-security.xml 
    </param-value> 
</context-param> 

<filter> 
    <filter-name>springSecurityFilterChain</filter-name> 
    <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class> 
</filter> 

<filter-mapping> 
    <filter-name>springSecurityFilterChain</filter-name> 
    <url-pattern>/*</url-pattern> 
</filter-mapping> 

<listener> 
    <listener-class>org.springframework.security.web.session.HttpSessionEventPublisher</listener-class> 
</listener> 

और applicationContext-security.xml फ़ाइल इस तरह से लग रहा है ...

<http use-expressions="true"> 
    <intercept-url pattern="/index.html" access="permitAll" /> 
    <intercept-url pattern="/timeout.html" access="permitAll" /> 
    <intercept-url pattern="/redirect.html" access="permitAll" /> 
    <intercept-url pattern="/media/**" access="permitAll" /> 
    <intercept-url pattern="/includes/**" access="permitAll" /> 
    <intercept-url pattern="/office/**" access="hasRole('ROLE_USER')" /> 
    <intercept-url pattern="/office/admin/**" access="hasRole('ROLE_ADMIN')" /> 

    <form-login login-page="/index.html" 
      authentication-failure-url="/index.html?login_error=1" 
      default-target-url='/office/kunden.html' 
      always-use-default-target='true' 
      /> 
    <logout logout-success-url="/index.html" /> 
    <remember-me /> 
    <session-management invalid-session-url="/index.html"> 
     <concurrency-control max-sessions="2" error-if-maximum-exceeded="true" /> 
    </session-management> 
</http> 

<authentication-manager> 
    <authentication-provider> 
     <jdbc-user-service data-source-ref="mysqldataSource" 
        authorities-by-username-query="select username, authority from benutzer where username = ?" 
        users-by-username-query="select username, password, enabled from benutzer where username = ?"/> 
    </authentication-provider> 
</authentication-manager> 

डेटाबेस कनेक्शन भला हो रहा है

अगर कोई मुझे उस पर संकेत दे सकता है तो मुझे बहुत खुशी होगी क्योंकि मैंने पहले से ही बहुत कुछ किया है, लेकिन अभी तक कोई समाधान नहीं मिला है।

मैं वसंत 3.1 और बिल्ला 7.0.23

+0

क्या आपका मतलब है "j_security_check" या "j_spring_security_check"? आपके पास दोनों हैं ... –

+0

क्षमा करें, यह j_spring_security_check – xSNRG

+0

उस अनुरोध के लिए डीबग लॉग आउटपुट की जांच करें और देखें कि स्प्रिंग सिक्योरिटी इसे संसाधित करने के बारे में क्या कहती है। आपको फ़िल्टर श्रृंखला के माध्यम से अपने मार्ग की एक विस्तृत रिपोर्ट देखना चाहिए। –

उत्तर

0

आपका विन्यास ठीक लग रहा है का उपयोग करें। एक बात यह है कि 404 का मामला यह हो सकता है कि default-target-url='/office/kunden.html' एक नियंत्रक को इंगित करता है या देखता है कि यह अस्तित्व में नहीं है।

जांचें कि यूआरएल /office/kunden.html काम करता है - इसलिए सुरक्षा सामग्री को निष्क्रिय करें (बस <security:intercept-url pattern="/**" access="permitAll" /> जोड़ें) और इसे आज़माएं।

एक और चीज जो गलत हो सकती है, यह है कि ट्यूटोरियल वसंत 3.0 के लिए है लेकिन वसंत 3.0 नहीं है। मैं उम्मीद नहीं करता कि यह कारण है, लेकिन इसे एक कोशिश और डाउनग्रेड दें।

+0

यही मैंने पहले किया था, सुरक्षा प्रतिबंध बंद कर दिया। वही मुद्दा। शायद आप सही और डाउनग्रेडिंग मदद कर सकते हैं। – xSNRG

+0

क्या आप स्पष्ट कर सकते हैं कि कौन सा अनुरोध 404 का कारण बन रहा है? आपको लॉग से बाहर काम करने और अपने ब्राउज़र द्वारा भेजे गए अनुरोधों की निगरानी करके सक्षम होना चाहिए (उदाहरण के लिए फायरबग का उपयोग करना)। –

+0

@xSNRG: यदि एक ही समस्या बाहर निकलती है तो वसंत सुरक्षा को सक्षम बनाता है तो समस्या 'कुंडेन नियंत्रक या दृश्य से संबंधित है। - क्या आपने ट्यूचरल को इसके अंत में लागू किया था, क्योंकि ऐसा लगता है कि सुरक्षा सामग्री के बाद 'कुंडेन नियंत्रक लागू किया गया है? – Ralph

2

मैं दो बातों की जांच होगी:

  1. अनुरोध प्रेषण

जांच करने के लिए अनुरोध प्रेषण सिर्फ सुनिश्चित करें कि आपके आवेदन में सर्वलेट कंटेनर में सुलभ है वसंत-सुरक्षा config प्रथम स्थान। मतलब, आपने http://localhost:8080/App/j_spring_security_check का उल्लेख किया है। क्या आपका एप्लिकेशन उस यूआरएल के तहत सुलभ है? http://localhost:8080/App उचित सामग्री (HTTP 200) दिखाता है? भी सुनिश्चित करें कि प्रेषक सर्वलेट ठीक से कॉन्फ़िगर किया गया है

<!-- Spring Hauptteil --> 

    <servlet> 
     <servlet-name>spring</servlet-name> 
     <servlet-class> 
      org.springframework.web.servlet.DispatcherServlet 
     </servlet-class> 
     <load-on-startup>1</load-on-startup> 
    </servlet> 
    <servlet-mapping> 
     <servlet-name>spring</servlet-name> 
     <url-pattern>*.html</url-pattern> 
    </servlet-mapping> 

आप अपने web.xml में यह प्रदान नहीं किया है, तो आपके अनुरोध भी ठीक से भेजा नहीं हो सकता है इससे पहले कि यह समाप्त होता है वसंत-सुरक्षा के माध्यम से जांच की जा रही: ट्यूटोरियल आपके द्वारा दी गई है, वहाँ इस खंड है।

यदि यह आपकी सहायता नहीं करता है, तो इसे आजमाएं।

documentation के बाद, न्यूनतम कॉन्फ़िगरेशन यह जांचने के लिए पर्याप्त होना चाहिए कि आपका सेटअप सही है या नहीं। यदि आपने ट्यूटोरियल का पालन किया है, तो आप कुछ मामूली गलती कर सकते हैं (उदाहरण के लिए टाइपो) जो वसंत-सुरक्षा को उचित रूप से लॉन्च नहीं करेगा। फिर लॉगर आउटपुट में कुछ त्रुटि जानकारी छोड़ना आसान है। मेरा सुझाव है कि आप निम्न कार्य करें।

  1. दस्तावेज़ में उपलब्ध न्यूनतम कॉन्फ़िगरेशन का समर्थन करने के लिए अपने एप्लिकेशन कोटेन्स्ट-सुरक्षा.एक्सएमएल बदलें।
  2. लॉन्च आवेदन और http://localhost:8080/App/j_spring_security_check

करने के लिए जाना आप उचित प्रतिक्रिया मिलता है - जब तक आप कर चुके हैं config को संशोधित करने का प्रयास करें।

प्वाइंट जानने के लिए क्या DelegatingFilterProxy (web.xml में परिभाषित) कुछ अन्य वसंत के आईओसी द्वारा प्रबंधित फिल्टर करने के लिए वास्तव में है सौंपने है अनुरोध। यह फ़िल्टर सुरक्षा नामस्थान के माध्यम से applicationContext-Security में परिभाषित किया जा रहा है। यदि यह किसी कारण से काम नहीं करेगा, तो फ़िल्टर शुरू नहीं किया जाएगा, और आप इस तथ्य पर ध्यान दिए बिना http 404 को देख सकते हैं कि शेष एप्लिकेशन ठीक से शुरू होता है।

Uffff, पाठ के बहुत सारे;)

0

उन लोगों को जो एक ही लक्षण का सामना के लिए, लेकिन एक अलग स्थिति के लिए, जो लोग एक लोड संतुलन जो SSL offloading करता है के पीछे हैं, निम्नलिखित जवाब आप में डाल सकता है सही दिशा। मैं एक ऐसी ही समस्या थी और यह पता चला कि भेजे अनुरोध सही संभाला था, एक प्रतिक्रिया वसंत सुरक्षा एक पूर्ण यूआरएल जो default-target-url विशेषता के आधार पर परिभाषित किया गया है करने के लिए एक रीडायरेक्ट भेजता है तथापि के रूप में (HTTPS के बजाय HTTP के साथ शुरू)

<security:form-login login-page="/login.jsp" default-target-url="/index.jsp" authentication-failure-url="/login.jsp?error=true" /> 

अब ग्राहक ब्राउज़र, http पर पुनः निर्देशित स्थान को खोलने के लिए कोशिश करता है loadbalancer पर विफल रहता है (जो केवल स्वीकार करता https यातायात) और रिपोर्ट एक 404 NOT FOUND

हम बंदरगाह पर आने वाले सभी अनुरोधों के लिए निम्नलिखित mod_header निर्देश जोड़कर इस समस्या का समाधान लोड बैलेंसर में 443 (https):

RequestHeader set X-Forwarded-Proto "https"

अतिरिक्त अतिरिक्त हेडर जोड़ देगा। यदि आप जेटी जैसे एप्लिकेशन सर्वर चलाते हैं, तो यह इस हेडर को पहचान लेगा और आने वाले अनुरोध का अनुवाद करेगा। (देखें http://www.gossamer-threads.com/lists/apache/users/407272)