Вопрос по spring, spring-security, java – Могу ли я иметь несколько контекстов безопасности с пружинной безопасностью?

9

У меня есть одно определение контекста безопасности, которое использует PreAuthenticatedProcessingFilterEntryPoint для гибкой части моего приложения. Как я могу иметь другое определение, которое будет использовать стандартную форму входа в систему с HTML-формами для другой части моего приложения? Вот что у меня сейчас есть:

    <?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>

То, что я хотел бы сделать, - это использовать другой поставщик аутентификации для URL-адресов, находящихся на сайте администратора, тот, который у меня в настоящее время есть, для приложения flex. Поэтому я хочу, чтобы в безопасности URL-адресов администратора использовался другой компонент userDetailsService.

У меня та же проблема ... как это закончилось? HDave
@HDave Я не уверен, чем закончилась проблема, связанная с весенней безопасностью (хотя, думаю, я решил ее, как-то, см. Ответы ниже), но в конце я отказался от идеи интерфейса администратора java и полностью переделал ее в Jython. большая часть приложения для проекта пошла именно так. Vasil

Ваш Ответ

3   ответа
0

какие части вашего приложения перехватываются цепочкой фильтров Spring Security. Где-то в вашей конфигурации XML (в зависимости от того, сделали ли вы простую конфигурацию тега или нет), естьintercept regex как это :

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

Вы можете иметь разные шаблоны перехвата, которые используют разные конфигурации (или разные части цепочки фильтров безопасности). Я мог бы дать вам более конкретный ответ, если вы разместите свою текущую конфигурацию XML.

РЕДАКТИРОВАТЬ: В настоящее время вы используетеhttp тег для определения конфигурации Spring Security. Этот тег используется в качестве ярлыка / помощника, и он автоматически определяет множество элементов цепочки фильтра безопасности, которые также можно настроить вручную. Я думаю, что ваш вариант использования не соответствует парадигме автоматической настройки, поэтому вам нужно будет вручную настроить цепочку фильтров для различных шаблонов URL (как видно из поста ниже моего). Вы можете создать свой собственный PreAuthenticationFilter (который будет принимать пользовательский UserDetailsService) и добавить его, где это необходимо, к отображению перехвата цепочки фильтров.

Error: User Rate Limit Exceeded Vasil
12

В Spring Security добавлена поддержка сценария в версии 3.1. В настоящее время он доступен как Release Candidate, реализованныйSEC-1171, Подробная информация о синтаксисе приведена в руководстве, прилагаемом к 3.1.

Это довольно просто в использовании. В основном вы просто определяете несколькоhttp элементы в конфигурации Spring Security, по одному для каждого контекста. Мы используем его так:

<!-- 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>

Ключевым моментом, который стоит отметить, являетсяpattern="/admin/**" во-первыхhttp элемент. Это говорит Spring, что все URL под/admin подчиняются этому контексту вместо контекста по умолчанию & # x2014; и, следовательно, URL-адреса под/admin используйте вместо этого фильтр предварительной авторизации.

Error: User Rate Limit ExceededhttpError: User Rate Limit ExceededSecurityContextError: User Rate Limit ExceededhttpError: User Rate Limit Exceeded
2

<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>
Error: User Rate Limit Exceeded Vasil

Похожие вопросы