2011-11-03 3 views
0

우리의 응용 프로그램에서는 폼 기반 인증을 사용하여 로그인 할 때 사용자가 원하는 데이터 소스를 선택할 수 있도록해야하며 표준 양식 기반 인증을 사용할 때 가능한지 확실하지 않습니다. TextInputCallback을 사용하여 가능하다고 들었지만 구현 방법 (및 구현 방법)을 모릅니다.추가 매개 변수를 j_security_check에 전달

+0

TextInputCallback은 JAAS의 일부입니다. – EJP

답변

0

web.xml에는 최대 하나의 <login-config> 태그가있을 수 있습니다. 하나의 웹 응용 프로그램에서 둘 이상의 영역을 사용할 수 없음을 의미합니다. 따라서 컨테이너 별 솔루션이 필요합니다.

Tomcat에는 다른 영역을 사용할 수있는 CombinedRealm이 있습니다.

하나 이상의 영역을 포함하는 영역 구현. 인증이 구성된 순서로 각 영역에 대해 시도됩니다. 영역이 사용자를 인증하면 인증이 성공합니다. 영역을 결합 할 때 사용자 이름은 모든 영역에서 고유해야합니다.

아마도 귀하의 요구 사항과 일치합니다. 그렇지 않고 사용자가 두 개 이상의 영역 (동일한 사용자 이름)에 존재하는 경우 접두어를 사용할 수 있습니다. 예를 들어 "domain\myuser"을 사용자 이름으로 설정하십시오.

내포 된 JDBCRealm을 사용하는 경우 접두사가 붙은 사용자 이름이 포함 된 데이터베이스보기를 만들 수 있으며이보기를 사용자 테이블로 사용하십시오.

또 다른 방법은 사용자 지정 영역에서 접두사를 제거하고 컨테이너의 JDBCRealm (또는 다른 영역)을 호출하는 것입니다.하지만 코딩이 필요합니다. 어쨌든 너무 어렵지 않아야합니다. 이미 존재하는 영역이 대리자 디자인 패턴과 함께 사용될 수 있습니다.

+0

당신의 생각이 바르게되면, 이것을하기 위해 데이터베이스를 수정해야합니다. 그러나 Spring의 AbstractRoutingDataSource를 사용하여 이들을 전환하는 방법은 어떻습니까? 마이그레이션/통합 프로젝트이므로 데이터베이스 설정을 변경하거나 새로운 설정을 추가 할 수 없습니다. – Sergey

+0

'CombinedRealm'을 사용하고 데이터베이스에 동일한 사용자 이름이 없으면 새보기를 만들 필요가 없습니다. 'CombinedRealm'을 사용하고 데이터베이스에 같은 사용자 이름이 있으면 데이터베이스를 수정하지 않고 사용자 영역을 작성할 수 있습니다. Spring의'AbstractRoutingDataSource'에 대해서는 아무것도 모른다. – palacsint