Пользовательский сеанс безопасности Springmanagementfilter в том же значении ошибки - PullRequest
3 голосов
/ 02 февраля 2012

Я пытаюсь настроить фильтр управления сеансами в Spring Security, но я получаю сообщение об ошибке, в котором говорится, что мой фильтр и фильтр по умолчанию имеют одинаковое значение 'order' (хотя у меня нет <session-managent> в моем<http> конфигурации, и у меня есть autoconfig = false, как сказано в Spring Security в его документации).

Вот моя конфигурация Spring Security:

<http auto-config="false" use-expressions="true">

    <custom-filter position="SESSION_MANAGEMENT_FILTER" ref="filtroGestionSesion" />

    <intercept-url pattern="/resources/**" filters="none"/>
    <intercept-url pattern="/faces/javax.faces.resource/**" filters="none"/>
    <intercept-url pattern="/faces/inicio.xhtml" access="permitAll"/>
    <intercept-url pattern="/faces/paginas/autenticacion/login.xhtml*" access="permitAll"/>
    <intercept-url pattern="/faces/paginas/administracion/**" access="isAuthenticated()"/>
    <intercept-url pattern="/faces/paginas/barco/**" access="isAuthenticated()"/>
    <intercept-url pattern="/faces/paginas/catalogo/**" access="permitAll"/>
    <intercept-url pattern="/faces/paginas/error/**" access="permitAll"/>
    <intercept-url pattern="/faces/paginas/plantillas/**" access="permitAll"/>
    <intercept-url pattern="/**" access="denyAll" />

    <form-login login-processing-url="/j_spring_security_check"
                login-page="/faces/paginas/autenticacion/login.xhtml"
                default-target-url="/faces/paginas/administracion/inicioAdmon.xhtml"
                always-use-default-target="true"
                authentication-failure-url="/faces/paginas/autenticacion/login.xhtml?error=authentication" />

    <logout logout-url="/j_spring_security_logout"
            logout-success-url="/faces/inicio.xhtml"
            invalidate-session="true" />
</http>

<global-method-security pre-post-annotations="enabled" />

<authentication-manager>
    <authentication-provider>
      <user-service>
        <user name="myuser" password="myuser" authorities="" />
      </user-service>
    </authentication-provider>
</authentication-manager>

<beans:bean id="filtroGestionSesion" class="springSecurity.FiltroGestionSesion">
    <beans:constructor-arg ref="securityContextRepository" />
    <beans:property name="invalidSessionUrl" value="/faces/paginas/autenticacion/login.xhtml?error=timeout" />
</beans:bean>

<beans:bean id="securityContextRepository" class="org.springframework.security.web.context.HttpSessionSecurityContextRepository" />

Класс с моим настраиваемым фильтром (springSecurity.FiltroGestionSesion) является копией-вставкой из Spring Spring (org.springframework.security.web.session.SessionManagementFilter), но изменяет имя пакета, имя класса и некоторый пользовательский код, который я добавил в метод doFilter.

Почему это не работает и выдает ошибку о том, что оба фильтра имеют одинаковый порядок?

Я уже отключил фильтр по умолчанию, удалив соответствующий дочерний элемент <session-mangement> из <http>, так чтоПоложение моего фильтра не конфликтует с фильтром по умолчанию.

Нужно ли удалять какой-либо другой элемент?или настроить что-нибудь еще?

Кто-нибудь знает, как сделать, чтобы пользовательский фильтр работал в положении SESSION_MANAGEMENT_FILTER, отключив фильтр по умолчанию?

Заранее спасибо.

1 Ответ

9 голосов
/ 08 февраля 2012

Я наконец нашел решение. Я положил это здесь, если кому-то интересно.

Способ отключения фильтра управления сеансом по умолчанию заключается не в удалении элемента <session-mangement> из <http>, а в добавлении его без защиты от фиксации сеанса:

<session-management session-fixation-protection="none" />

Таким образом, фильтр управления сеансом по умолчанию не срабатывает, и вы можете добавить свой пользовательский фильтр в эту позицию без конфликта в цепочке фильтров.

Я проверил это, просматривая журналы отладки Spring Security в моем веб-приложении.

Надеюсь, это кому-нибудь поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...