복붙노트

[SPRING] 봄 보안 사용자 정의 sessionmanagementfilter 같은 주문 값 오류

SPRING

봄 보안 사용자 정의 sessionmanagementfilter 같은 주문 값 오류

Spring Security의 세션 관리 필터를 사용자 정의하려고하는데, 필자의 가 없어도 내 필터와 기본 필터가 동일한 'order'값을 갖는다는 오류가 발생합니다. http> 설정과 나는 autoconfig = false를 가지고있다.

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 Security (org.springframework.security.web.session.SessionManagementFilter)에서 복사하여 붙여 넣기하지만 패키지 이름, 클래스 이름 및 내가 추가 한 커스텀 코드를 변경한다. doFilter 메서드에 추가합니다.

왜 작동하지 않고 두 필터가 모두 같은 순서로 오류가 발생 했습니까?

내 필터의 위치가 기본 필터와 충돌하지 않도록 에서 해당 하위 요소 를 제거하여 기본 필터를 이미 사용 중지했습니다.

다른 요소를 제거하거나 다른 것을 사용자 정의해야합니까?

어느 누구도 SESSION_MANAGEMENT_FILTER의 위치에서 사용자 정의 필터를 작동시키는 방법을 알고 있으므로 기본 필터를 비활성화 할 수 있습니까?

미리 감사드립니다.

해결법

  1. ==============================

    1.나는 해결책을 찾았습니다. 누군가 흥미로워지면 여기에 넣었습니다.

    나는 해결책을 찾았습니다. 누군가 흥미로워지면 여기에 넣었습니다.

    기본 세션 관리 필터를 비활성화하는 방법은 요소를 에서 제거하지 않고 세션 고정 방지 기능을 추가하여 제거하는 것입니다.

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

    이렇게하면 기본 세션 관리 필터가 실행되지 않으므로 필터 체인에 충돌이없는 위치에 사용자 지정 필터를 추가 할 수 있습니다.

    내 webapp에서 스프링 보안의 디버그 로그를 살펴 보았습니다.

    누군가가 도움이되기를 바랍니다.

  2. from https://stackoverflow.com/questions/9118793/spring-security-custom-sessionmanagementfilter-same-order-value-error by cc-by-sa and MIT license