2012-09-11 1 views
1

Spring SecuritySpringMVC을 사용하여 작고 간단한 webapp를 만들었으며 다중 테넌트 애플리케이션으로 변환하려고합니다.
내가 원하는 개념은 실제 JSP를 재사용하고 URL의 경로를 기반으로 결정한 구성에 따라 내용을 변경하는 것입니다.스프링 MVC와 스프링 보안을 사용하는 멀티 테넌트 웹 애플리케이션에서 form-login 사용

예 :
고객 # 1 (ABC) - URL : http://mydomain.com/abc/login.html
고객 # 2 (XYZ) - URL : http://mydomain.com/xyz/login.html

는 그래서 "임차인"의 이름이 페이지의 경로 접두어입니다.

나는 이렇게 될 내 컨트롤러를 수정 :

@Controller 
@RequestMapping("/{customer:[a-zA-Z0-9]+}/login.htm") 
public class LoginController 
{ 
    private static final Logger logger = Logger.getLogger(LoginController.class); 

    @RequestMapping 
    @ReadOnlyRequest 
    public String login(@PathVariable("customer") String customer, HttpServletRequest request) 
    { 
     // Do some 'customer' related actions here 

     return "login"; // Map to the 'login.jsp' view 
    } 
} 

내보기 확인자 구성은 다음과 같습니다

<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 
    <property name="viewClass" value="org.springframework.web.servlet.view.JstlView" /> 
    <property name="prefix" value="/WEB-INF/jsp/" /> 
    <property name="suffix" value=".jsp" /> 
</bean> 

지금까지, 나는 다음과 같은 form-login 구성했다 :

<form-login 
    login-page="/login.htm" 
    authentication-failure-url="/login.htm?error=true" 
    login-processing-url="/login_process" 
    default-target-url="/index.jsp" 
    always-use-default-target="true" 
/> 

을 하지만 내 변경 사항을 지원하도록 변환하는 방법을 모르겠습니다.

<form-login 
    login-page="/${customer}/login.htm" 
    authentication-failure-url="/${customer}/login.htm?error=true" 
    login-processing-url="/${customer}/login_process" 
    default-target-url="/index.jsp" 
    always-use-default-target="true" 
/> 
+0

.. http://stackoverflow.com/questions/20627972/multi-tenant- webapp-using-spring-mvc-and-hibernate-4-2-0-final ...하지만 대답은 찾을 수 없습니다 ..이 소스 코드를 게시 할 수 있습니까? 이 일을 위해 3 일 동안 노력했습니다. – edaklij

+0

@edaklij - 제가 작업 한 프로젝트는 내가 얻은 조언을 구현하기 전에 취소되었습니다. – RonK

답변

2

한 가지 가능한 아이디어 세입자 식별자를 수동으로 처리하는 대신 URL 재 작성을 사용하는 것입니다 :

같은로 변환하는 방법이 있나요. 다음과 같이이 방법 당신은 완전히, 예를 들어, 사용자 코드에서 세입자 처리 로직을 분리 할 수 ​​있습니다

  • 당신은 /login.html/abc/login.html을 변환 요청 속성으로 세입자 식별자를 저장 인바운드 재 작성 규칙을 정의합니다.

  • 응답에 기록되는 URL에 현재 테넌트 식별자를 추가하는 아웃 바운드 규칙을 정의합니다. 스프링 보안은 리다이렉트를 전송할 때 그러한 규칙을 존중해야한다고 생각한다. 그렇지 않으면 커스텀 RedirectStrategy을 정의 할 수있다. 나는이 아이디어를 테스트하지 않은 작동 것이라고 확신 할 수는 없지만

.

도 참조 : 나는 여기에 미소 짓는 논의에 opend 한

+0

'form-login' 설정은 세션이 만료되거나 잘못된 URL을 입력 할 때 Spring이 사용자를 로그인 페이지로 리디렉션하도록 허용합니다. 'http : // mydomain/abc/login.htm'으로 자동 리디렉션되도록 사용자가'http : // mydomain/abc /'아래의 불법 URL로 이동하길 원합니다. 현재는 'http : // mydomain/login.htm'에만 리디렉션 할 수 있습니다. – RonK

+0

고마워요 - URL 재 작성 필터가 가장 좋은 행동 방안 인 것 같습니다. 내 자신의 것을 쓸 수도 있지만 일반적인 생각은 내가 필요한 것입니다. – RonK

관련 문제