Tomcat 7에서 실행되는 자바 웹 애플리케이션이 있습니다. 백엔드에서 스프링 3.2와 함께 스프링 3.2를 사용하고 있습니다./api/** 패턴 다음에 RESTful URL을 통해 API를 노출합니다.스프링 보안 3.1을 사용하여 폼 - 로그인과 http- 기본 보안을 모두 사용하여 동일한 RESTful 리소스를 보호합니다.
웹 응용 프로그램의 UI는 BackboneJS를 사용하여 작성됩니다. RESTful URL에 직접 매핑 된 백본 모델을 사용하고 있습니다.
UI는 양식 로그인 인증을 사용하여 잠겨 있으므로 사용자가 현재 인증되지 않은 경우 항상 로그인 화면으로 리디렉션됩니다.
이제 http-basic 인증을 사용하여 다른 RESTful URL을 다른 외부 서비스에 노출하려고 시도하고 있습니다. 불행히도, 동일한 URL 패턴을 확보 할 때 스프링은 하나 이상의 필터 체인을 사용할 수없는 것 같습니다. 구성 파일에서 먼저 정의 된 것이 우선합니다.
동일한 RESTful 리소스에 대해 별도의 URL 패턴에 매핑해야한다는 것은 싫지만 선택의 여지가없는 것처럼 보입니다. 가능 (보안의 두 가지 유형을 구성하는 것입니다 HTTP :
<!-- configure basic http authentication -->
<http pattern="/api/**" create-session="stateless">
<intercept-url pattern="/**" access="ROLE_USER"/>
<http-basic/>
</http>
<!-- configure form-login authentication -->
<http auto-config="true" use-expressions="true">
<intercept-url pattern="/ui/login" access="permitAll" />
<intercept-url pattern="/ui/logout" access="permitAll" />
<intercept-url pattern="/ui/loginfailed" access="permitAll" />
<intercept-url pattern="/**" access="ROLE_USER" />
<custom-filter ref="ajaxTimeoutRedirectFilter" after="EXCEPTION_TRANSLATION_FILTER" />
<form-login login-page="/ui/login" default-target-url="/" authentication-failure-url="/ui/loginfailed" />
<logout logout-success-url="/ui/logout" />
<session-management invalid-session-url="/ui/login"/>
</http>
내 질문은 : 여기
내 (현재 부서) 봄 보안 구성의 중요한 샘플입니다 -basic과 form-login)을 Spring Security를 사용하여 동일한 URL 패턴에 적용 할 수 있습니까? 이 유형의 시나리오에 대한 모범 사례가 있습니까?고맙습니다.
인증되지 않은 사용자가 이러한 리소스 중 하나를 요청하려고 할 때 우선 적용 하시겠습니까? 양식 기반 인증을 사용하면 로그인 페이지로 302 리디렉션을 얻습니다. 기본 인증은 401 인증을 얻습니다. 기본 인증 클라이언트가 도전 받기를 기다리지 않고 선제 적으로 인증 헤더를 포함해야한다고 주장하지 않는 한 동일한 URL에서 둘 모두를 올바르게 지원할 수있는 방법을 모르겠습니다. –
@IanRoberts 이것은 동일한 URL을 보호 할 때 주요 문제인 것으로 보입니다.이상적으로 보안 서비스가 들어오는 요청 헤더를 기반으로 하나 또는 둘 다 선택할 수있을만큼 똑똑하기를 바란다. 지금은 UI 대 외부 서비스에서 발생한 요청에 별도의 URL을 사용하는 방향으로 기울어 져있다. 그것은 가장 간단한 접근법처럼 보입니다. –