2014-09-01 2 views
4

누군가는 인증이 필요한 무언가를 할 때 팝업 보안을 사용하여 (스프링 보안을 사용하여) 인증하는 방법을 알고 있습니다.스프링 보안이 팝업 로그인을 엽니 다.

예를 들어, 제품에 장바구니를 추가하고 (사용자가 이미 구매 한 페이지) 체크 아웃을 수행하거나 사용자가 이미 인증되었거나 사용자를 위해 팝업이 열리는 "지금 구매"버튼이 있다고 가정 해 봅니다. 인증을 수행하십시오.

인증이 성공한 경우 "지금 구입"페이지로 리디렉션되거나 팝업 된 페이지가 그대로 유지됩니다 (오류 메시지 "잘못된 로그인").

Google에서 이미 일종의 해결책을 찾고 있지만 행운은 없습니다.

누군가 올바른 방향으로 나를 가리킬 수 있습니까?

감사합니다.

+0

내가 아는 한 문제는 팝업을 열지 않는 것이고, 액세스가 거부 된 경우 현재 페이지를 다시로드 할 필요없이 팝업을 열 때를 ​​더 많이 알 수 있습니다 . -- 이게 옳은 거니? – Ralph

+0

이 [대답] (http://stackoverflow.com/questions/3444864/ajax-login-with-spring-webmvc-and-spring-security)을 시도해 볼 수 있습니다. – kazbeel

답변

4

그냥 생각할 시간이 없었습니다. 그것. 그것은 클라이언트 쪽만입니다. xhr.status

  • 경우 (확인) :

    1. 링크에 EventListener를 넣어/HTTP 상태 코드를 확인
    2. 를 사용하여 자바 스크립트 버튼 --이벤트를 클릭하고 XMLHttpRequest
    3. 를 통해 양식 액션 또는 링크를 호출 바로 리디렉션에 따라 대상 URL (via Html5 History API)와 현재의 URL을 교체하고 xhr.responseText (What other options for replacing entire HTML document via W3C DOM)와 전체 문서 다른
    4. 경우 (리디렉션)을 대체
    5. else if (Unauthorized) 열린 팝업
  • 0

    작업을 구성 요소로 나눕니다.

    critera에 따라 활성화되는 라이트 박스를 만듭니다.

    양식을 아약스로 제출하십시오.

    귀하의 인증 컨트롤러는 다음을 수행해야

    succesfull 경우 - 유엔 succesfull 반환 조각이 왜 그 잘못된 조언을하는 경우> 체크 아웃 페이지 로 리디렉션.

    올바르지 않은 부분이 반환되면 양식 요소를 완전히 새로 고침하여 csrf 공격을 방지해야합니다.

    내가 그 방법을 했어. 프로젝트를 설정하고 렌더링을 보는 방법에 따라 코드가 달라질 수있다.

    +0

    OP 질문은 인증을 시작하는 방법에 대한 것입니다. 따라서 인증 상자는 적절한 순간에 표시되지만 사용자 이름과 암호를 제출하는 방법은 표시되지 않습니다. – Ralph

    0

    사용자가 Buynow 버튼을 눌렀을 때 아약스 전화를 사용하여 사용자의 인증 여부를 확인할 수 있습니다.

    사용자가 인증되면 제품 카트 양식을 다음보기 (컨트롤러 메소드)로 제출 또는 전달하십시오.

    인증되지 않은 경우 로그인을 위해 팝업을 열 수 있습니다.

    로그인 양식에서 성공한 경우 장바구니 양식을 다음보기로 제출하면 사용자에게 확인을 요청하여 오류 메시지를 표시합니다.

    다음보기에서 사용할 수 있도록 장바구니 정보를 세션에 저장하십시오.

    0

    일부 이벤트에서 팝 상자 구현을 수행해야합니다 (이 작업에는 모든 프론트 엔드 프레임 워크를 사용할 수 있음). 인증이 문제가되는 반면, "project-security.xml"은 당신을 위해 그것을 할 것입니다. 요구 사항에 따라 구성해야합니다.

    1

    실제로 스프링 보안은 상자에서 리디렉션을 지원하므로 SavedRequestAwareAuthenticationSuccessHandler을 살펴보십시오. 따라서 URL을 보호해야합니다.구매 버튼 ("/purchase/"productIdHere" 또는 /purchase?productId=someProductId과 같은 요청을 수행합니다)의 <intercept-url pattern = "/purchase/*" access = "isAuthenticated()" /> (또는 무엇이든간에 access = "hasRole('user'))과 같은 것이 있으면 사용자를 로그인 페이지로 리디렉션하고 로그인 성공 후 원래 페이지로 돌아 가야합니다. 그리고 컨트롤러에 당신 같은 요청을 처리 할 수 ​​있습니다 : 당신이 요청으로 올바른 방향을 가리 키도록 노력하고, 당신은 당신의 요구에 따라 다른 것들과 일치 할 필요

    @Controller 
    ... 
    
    @RequestMapping(value = "/purchase..., method = ....) 
    public ModelAndView purchase(@PathVariable("productId") String/Long productId (or @RequestParam etc...) 
    Product someProduct = someService.getByProductId(productId); 
    ModelAndView mav = new ModelAndView("view.name"); 
    mav.setObject("product",product); 
    return mav; 
    

    합니다.

    희망이 있습니다.

    +0

    하지만 리디렉션은 팝업이 아닙니다. – Ralph

    -1

    봄 보안 스프링 MVC를 통해 작동합니다 - 그것은 리디렉션을 사용합니다. 따라서 사용자가 "보안 된"컨텐트에 도달하려고 시도하고 인증되지 않은 경우 HTTP 302가 반환되고 로그인 페이지로 리디렉션됩니다. 팝업 창에 관심이 있다면 MVC 모델을 깨뜨려 당연히 구현할 수 있지만 인생은 훨씬 어려워 질 것입니다 ....

    관련 문제