6

Tôi đang cố gắng để có được Tuckey UrlRewriteFilter để dọn dẹp URL cho webapp của tôi. Một vấn đề tôi gặp phải là khi spring-security thông báo rằng một người dùng nặc danh đang cố gắng truy cập một tài nguyên được bảo vệ, nó chuyển hướng đến một URL bao gồm đường dẫn servlet.Ghi lại URL chuyển hướng bảo mật mùa xuân

Những gì tôi muốn là, bởi ví dụ:

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

Những gì tôi hiện đang nhận được là:

tài liệu
> GET http://localhost:8080/my-context/protected-resource 
< Location: http://localhost:8080/my-context/-/login 

liên quan tôi đã tìm thấy cho đến nay:

DefaultRedirectStrategy, mà thực hiện chuyển hướng thực tế trong câu hỏi: http://static.springsource.org/spring-security/site/docs/3.0.x/apidocs/org/springframework/security/web/DefaultRedirectStrategy.html. Nó có một thuộc tính contextRelative mà là hấp dẫn nhưng tôi không nghĩ là sẽ cắt nó, nếu tôi thậm chí có thể tìm thấy một cách để cấu hình nó.

Một bài viết trên blog rằng đã giúp tôi có được này cho đến nay: http://nonrepeatable.blogspot.com/2009/11/using-spring-security-with-tuckey.html

Những gì tôi muốn biết là:

  1. Can/Tôi nên thuyết phục Tuckey để viết lại tiêu đề Location. < quy tắc đi > dường như không giúp ích gì ở đây.
  2. Tôi có thể/bằng cách nào đó tôi có thể tinh chỉnh cấu hình SS để phát ra URL được viết lại hay không. Tôi không nghĩ rằng điều này là khá gọn gàng, vì nó sẽ phá vỡ nếu viết lại đã bị vô hiệu hóa.

web.xml trông giống như

<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 trông giống như:

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

applicationContent-security.xml trông giống như:

<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

và đặt thuộc tính trang đăng nhập thành/đăng nhập? – rodrigoap

Trả lời

0

I'v bao giờ sử dụng Tuckey, nhưng sau khi xem nhanh tại docum entation tôi sẽ cố gắng thêm một quy tắc đối với trường hợp đăng nhập:

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

EDIT
Ok, và một cái gì đó như thế này:

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

Vấn đề không phải là yêu cầu gửi đến không được viết lại, nhưng thay vì tiêu đề Vị trí đi như một phần của chuyển hướng không được viết lại. Tôi đã phát hiện ra rằng quy tắc đi với giao thức đầy đủ, máy chủ, cổng, ngữ cảnh, v.v. sẽ bắt đầu tiêu đề Vị trí, nhưng điều này cũng không tuyệt vời. – ptomli

2

Tôi nhìn vào vấn đề này đối với dự án của chúng tôi năm ngoái và tại lúc đó vấn đề là Tucky không hợp tác với response.encodeRedirectUrl() để viết lại URL chuyển hướng. Tôi đã liên lạc với họ nhưng tôi đã không theo dõi điều này.

Giải pháp của tôi là cho phép URL lộn xộn quay lại máy khách nhưng sau đó dọn sạch nó bằng quy tắc chuyển hướng Tucky (chuyển hướng thứ hai).

Vì vậy, thêm một quy tắc phù hợp với URL xấu xí của bạn từ chuyển hướng an ninh và phát hành chuyển hướng của riêng bạn để URL sạch:

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

Vâng, nó liên quan đến hai chuyển hướng, nhưng khách hàng sẽ không bao giờ nhìn thấy nó .. có lẽ là vấn đề.

1

an ninh mùa xuân đang làm chuyển hướng với một URL tuyệt đối như http://example.org/-/login

Cố gắng sử dụng một outbound-quy tắc mà không ^ start of string đánh dấu để khớp url tuyệt đối tạo ra bởi mùa xuân.

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

Tôi đã gặp sự cố tương tự nhưng có vẻ như đã được sửa trong phiên bản 3.2.0 của Tuckey. tức là response.encodeRedirectUrl() hiện được gói bởi Tuckeys UrlRewriteWrappedResponse nơi thực thi quy tắc ra ngoài diễn ra.

Các vấn đề liên quan