6

लिखना मैं अपने वेबपैड के लिए यूआरएल को व्यवस्थित करने के लिए टकी यूआरआरआरराइटफिल्टर प्राप्त करने की कोशिश कर रहा हूं। मुझे एक समस्या यह है कि जब वसंत-सुरक्षा नोटिस करती है कि एक अज्ञात उपयोगकर्ता किसी सुरक्षित संसाधन तक पहुंचने का प्रयास कर रहा है, तो वह उस URL पर रीडायरेक्ट करता है जिसमें सर्वलेट पथ शामिल होता है।वसंत-सुरक्षा रीडायरेक्ट यूआरएल

> GET http://localhost:8080/my-context/protected-resource 
< Location: http://localhost:8080/my-context/login 

क्या मैं वर्तमान में मिलता है:

> GET http://localhost:8080/my-context/protected-resource 
< Location: http://localhost:8080/my-context/-/login 

प्रासंगिक दस्तावेजों मैं अब तक मिल गया है:

क्या मैं करना चाहते हैं उदाहरण के द्वारा, है

DefaultRedirectStrategy, जो प्रश्न में वास्तविक रीडायरेक्ट करता है: http://static.springsource.org/spring-security/site/docs/3.0.x/apidocs/org/springframework/security/web/DefaultRedirectStrategy.html। इसमें एक संदर्भ है रिटेलिव प्रॉपर्टी जो आकर्षक है लेकिन मुझे नहीं लगता कि इसे काटने जा रहा है, अगर मैं इसे कॉन्फ़िगर करने का एक तरीका भी ढूंढ सकता हूं।

एक ब्लॉग पोस्ट में मदद की मुझे इतनी दूर मिल: http://nonrepeatable.blogspot.com/2009/11/using-spring-security-with-tuckey.html

मुझे पता है कि क्या करना चाहते हैं:

  1. कर सकते हैं/मैं Tuckey समझाने स्थान हैडर के पुनर्लेखन के लिए करना चाहिए। < आउटबाउंड-नियम > यहां किसी भी मदद की प्रतीत नहीं होता है।
  2. क्या मैं किसी भी तरह से पुनर्लेखित यूआरएल को उत्सर्जित करने के लिए एसएस कॉन्फ़िगरेशन को ट्विक कर सकता/सकती हूं। मुझे नहीं लगता कि यह काफी साफ है, क्योंकि यदि पुनः लिखना अक्षम था तो यह टूट जाएगा।

web.xml लग रहा है

<filter> 
    <filter-name>UrlRewriteFilter</filter-name> 
    <filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class> 
    <init-param> 
     <param-name>LogLevel</param-name> 
     <param-value>log4j</param-value> 
    </init-param> 
</filter> 
<filter-mapping> 
    <filter-name>UrlRewriteFilter</filter-name> 
    <url-pattern>/*</url-pattern> 
    <dispatcher>REQUEST</dispatcher> 
</filter-mapping> 

<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> 
    <dispatcher>REQUEST</dispatcher> 
    <dispatcher>FORWARD</dispatcher> 
    <dispatcher>INCLUDE</dispatcher> 
    <dispatcher>ERROR</dispatcher> 
</filter-mapping> 

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

urlrewrite.xml की तरह दिखाई देता है:

<urlrewrite> 
    <rule> 
     <from>^/(.*)$</from> 
     <to>/-/$1</to> 
    </rule> 
</urlrewrite> 

applicationContent-security.xml लगता है:

<http auto-config="true"> 
    <!-- allow GET requests to /login without authentication --> 
    <intercept-url pattern="/-/login" method="GET" filters="none"/> 

    <intercept-url pattern="/-/admin/**" access="ROLE_ADMIN"/> 
    <intercept-url pattern="/-/**" access="ROLE_USER"/> 

    <form-login login-page="/-/login" 
       login-processing-url="/-/login.do" 
       authentication-failure-url="/-/login?login_error" 
       default-target-url="/-/index" 
       always-use-default-target="true"/> 

    <logout logout-url="/-/logout" 
      logout-success-url="/-/login"/> 

    <access-denied-handler error-page="/-/access-denied"/> 
</http> 
+0

और लॉगिन-पेज विशेषता/लॉगिन में सेटिंग? – rodrigoap

उत्तर

0

I'v Tuckey इस्तेमाल कभी नहीं किया है, लेकिन शीघ्रता से अवलोकन के बाद डॉक्यूम पर प्रलेखन मैं लॉगिन मामले के लिए एक नियम जोड़ने की कोशिश करेंगे:

<urlrewrite> 
    <rule> 
     <from>^/my-context/login$</from> 
     <to>/my-context/login</to> 
    </rule> 
    <rule> 
     <from>^/(.*)$</from> 
     <to>/-/$1</to> 
    </rule> 
</urlrewrite> 

संपादित
ठीक है, और कुछ इस तरह:

<urlrewrite> 
    <rule> 
     <from>^/-/login$</from> 
     <to>/login</to> 
    </rule> 
    <rule> 
     <from>^/(.*)$</from> 
     <to>/-/$1</to> 
    </rule> 
</urlrewrite> 
+2

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

2

मैं अपने प्रोजेक्ट पिछले साल के लिए और इस समस्या की जांच करने उस समय समस्या यह थी कि टकी रीडायरेक्ट यूआरएल को फिर से लिखने के लिए respond.encodeRedirectUrl() के साथ सहयोग नहीं कर रहा था। मैंने उनसे संपर्क किया लेकिन मैंने इसका पालन नहीं किया है।

मेरा समाधान गन्दा यूआरएल को क्लाइंट पर वापस जाने की इजाजत देना था, लेकिन फिर उसे एक भाग्यशाली रीडायरेक्ट नियम (एक दूसरा रीडायरेक्ट) के साथ साफ़ करना था।

तो एक और नियम है कि सुरक्षा रीडायरेक्ट से अपने बदसूरत URL से मेल खाता जोड़ सकते हैं और साफ यूआरएल के लिए अपना निजी रीडायरेक्ट जारी करते हैं:

<rule> 
    <from>^/whatever/ugly.*$</from> 
    <to type="redirect">/login</to> 
</rule> 

हाँ, यह दो रीडायरेक्ट शामिल है, लेकिन ग्राहक इसे देख कभी नहीं होगा .. जो शायद बिंदु है।

1

स्प्रिंग सुरक्षा वसंत द्वारा उत्पन्न संपूर्ण url से मिलान करने के ^ start of string मार्कर के बिना एक आउटबाउंड-नियम का उपयोग करने के लिए की तरह http://example.org/-/login

कोशिश एक पूर्ण यूआरएल के साथ पुन: निर्देशन कर रही है।

<outbound-rule> 
    <from>/-/login(.*)$</from> 
    <to>/login$1</to> 
</outbound-rule>  
1

मैं एक ही समस्या में भाग गया, लेकिन यह टकी के संस्करण 3.2.0 में ठीक लगता है। यानी प्रतिक्रिया.encodeRedirectUrl() अब Tuckeys UrlRewriteWrappedResponse द्वारा लिपटा हुआ है जहां आउटबाउंड नियम निष्पादन होता है।

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