2009-07-01 53 views
9

Tôi có một định nghĩa ngữ cảnh bảo mật sử dụng PreAuthenticatedProcessingFilterEntryPoint cho phần flex của ứng dụng của tôi. Làm cách nào tôi có thể có định nghĩa khác sẽ sử dụng đăng nhập biểu mẫu chuẩn với biểu mẫu html cho một phần khác của đơn đăng ký của tôi? Dưới đây là những gì tôi hiện có:Tôi có thể có nhiều bối cảnh bảo mật với bảo mật mùa xuân không?

<?xml version="1.0" encoding="UTF-8"?> 
<beans:beans xmlns="http://www.springframework.org/schema/security" 
    xmlns:beans="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd 
         http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-2.0.1.xsd"> 


    <http auto-config="true" access-denied-page="/admin/access-denied"> 
     <intercept-url pattern="/admin/login*" filters="none"/> 
      <intercept-url pattern="/admin/access-denied" filters="none"/> 
     <intercept-url pattern="/admin/**/*" access="ROLE_ADMIN" /> 
     <form-login login-page="/admin/login" authentication-failure-url="/admin/login?login_error=1" 
      default-target-url="/admin/index" login-processing-url="/admin/login-process"/> 
     <logout logout-success-url="/admin/login"/> 

    </http> 

<global-method-security jsr250-annotations="enabled" /> 

    <beans:bean id="preAuthenticatedEntryPoint" class="org.springframework.security.ui.preauth.PreAuthenticatedProcessingFilterEntryPoint" > 
    </beans:bean> 


    <beans:bean id="userAccountManager" class="com.mycomp.service.managers.jpa.UserAccountJpaManager" /> 
    <beans:bean id="userService" class="com.mycomp.auth.DefaultUserDetailsService" /> 
    <beans:bean id="defaultPasswordEncoder" class="com.mycomp.auth.DefaultPasswordEncoder" /> 

    <authentication-provider user-service-ref="userService"> 
     <password-encoder ref="defaultPasswordEncoder"/> 
    </authentication-provider> 


</beans:beans> 

Những gì tôi muốn làm là sử dụng một nhà cung cấp xác thực cho các url được trong site admin, là Tôi hiện đang có là dành cho các ứng dụng flex. Vì vậy, tôi muốn bảo mật cho các url quản trị để sử dụng một userDetailsService bean khác.

+0

Tôi có cùng một sự cố ... làm thế nào điều này kết thúc? – HDave

+0

@HDave Tôi không chắc chắn vấn đề liên quan đến bảo mật mùa xuân đã kết thúc như thế nào (mặc dù tôi nghĩ rằng tôi đã giải quyết bằng cách nào đó xem câu trả lời bên dưới), nhưng cuối cùng tôi đã bỏ ý tưởng về giao diện quản trị java và redid hoàn toàn trong Jython kết thúc phần lớn các ứng dụng phụ trợ cho dự án đã đi theo cách đó. – Vasil

Trả lời

0

Tất cả các phần của ứng dụng của bạn bị chặn bởi chuỗi bộ lọc Bảo mật mùa xuân. Một nơi nào đó trong cấu hình xml của bạn (tùy theo nếu bạn đã làm thẻ cấu hình đơn giản hay không) có một chặn regex như thế này:

<intercept-url pattern="/**" ...> 

Bạn có thể có mô hình đánh chặn khác nhau mà sử dụng cấu hình khác nhau (phần aka khác nhau chuỗi bộ lọc bảo mật). Tôi có thể cung cấp cho bạn một câu trả lời cụ thể hơn nếu bạn đăng xml cấu hình hiện tại của mình.

EDIT: Hiện tại bạn đang sử dụng thẻ http để xác định cấu hình Bảo mật mùa xuân của mình. Thẻ này được sử dụng như một phím tắt/trợ giúp và nó tự động xác định rất nhiều phần của chuỗi Bộ lọc bảo mật cũng có thể được thiết lập theo cách thủ công. Tôi nghĩ rằng trường hợp sử dụng của bạn không phù hợp với mô hình tự động thiết lập, do đó bạn sẽ cần phải tự thiết lập chuỗi bộ lọc cho các mẫu URL khác nhau (như được thấy trong bài đăng bên dưới của tôi). Bạn có thể tạo PreAuthenticationFilter của riêng bạn (sẽ có một UserDetailsService tùy chỉnh) và thêm vào đó khi thích hợp với ánh xạ chặn chuỗi bộ lọc của bạn.

+0

Tôi đã đăng cấu hình ngữ cảnh bảo mật của mình. Tôi đánh giá cao nếu bạn có thể giúp tôi với điều này. – Vasil

2

Bản đồ mỗi chuỗi bộ lọc để một mẫu URL khác nhau:

<bean id="myfilterChainProxy" 
    class="org.springframework.security.util.FilterChainProxy"> 
    <security:filter-chain-map pathType="ant"> 
    <security:filter-chain pattern="/flex" filters="filterF"/> 
    <security:filter-chain pattern="/**" filters="filter1,filter2,filter3"/> 
    </security:filter-chain-map> 
</bean> 
+0

Tôi cho rằng đây là những gì tôi cần làm. Tuy nhiên tôi không biết cách dễ nhất để xác định một bộ lọc chỉ với một nhà cung cấp xác thực tùy chỉnh là gì. – Vasil

12

Nó đã được khó khăn để làm cho đến gần đây, nhưng bây giờ nó rất dễ dàng!

Bảo mật mùa xuân đã thêm hỗ trợ cho kịch bản trong phiên bản 3.1. Nó hiện đang có sẵn như là một ứng cử viên phát hành, được thực hiện bởi SEC-1171. Thông tin chi tiết về cú pháp nằm trong sách hướng dẫn đi kèm với 3.1.

Nó khá dễ sử dụng. Về cơ bản, bạn chỉ cần xác định nhiều phần tử http trong cấu hình Spring Security của mình, một phần cho mỗi ngữ cảnh. Chúng tôi đang sử dụng nó như thế này:

<!-- Configure realm for system administration users --> 
<security:http pattern="/admin/**" create-session="stateless"> 
    <security:intercept-url pattern='/**' access='ROLE_ADMIN' requires-channel="https" /> 
    <security:custom-filter position="PRE_AUTH_FILTER" ref="preAuthFilter" /> 
</security:http> 


<!-- Configure realm for standard users --> 
<security:http auto-config="true" access-denied-page="/error/noaccess" use-expressions="true" create-session="ifRequired"> 
    <security:form-login 
      ... 
      ... 
</security:http> 

Điều quan trọng cần lưu ý là pattern="/admin/**" trên các yếu tố đầu tiên http. Điều này cho biết rằng tất cả các URL dưới /admin đều phải tuân theo ngữ cảnh đó thay vì ngữ cảnh mặc định - và do đó, các URL dưới /admin sử dụng bộ lọc ủy quyền trước của bạn thay thế.

+0

Xin chào, tôi có cùng sự cố khi sử dụng nhiều phần tử 'http'.Tôi có nó được ánh xạ với các mẫu khác nhau và vẫn đã chia sẻ 'SecurityContext' giữa các lĩnh vực bảo mật (' http' elements). –

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