2013-05-18 4 views
0

내가 Playframework 2.1데드 볼트 - 액세스 실패 리디렉션

나는 액션 버튼과 컨트롤러 방법에 사용자가 클릭이 호출 곳에서 공개 페이지가와 데드 볼트 (2)를 사용하고 작동하지 않습니다,이 방법에 @SubjectPresent있다 그것. 사용자가 로그인하지 않은 경우 로그인 페이지로 리디렉션하고 사용자가 로그인 한 후에 메서드 호출을 실행하려고합니다.

나는 내가 여기에 프로젝트 샘플을 기반으로 설치 데드 2를

function launchDemo(demoId){ 

    jsRoutes.controllers.DemoLaunchApplication.launchDemo(demoId).ajax({ 

     success: function(data, textStatus) { 
     $("#result").html(data); 
     }, 
     error: function(data) { 
     alert("error"); 
      $("#result").html(data); 
     } 

    }) 
    } 

다음과 같이 jsroutes를 통해 컨트롤러 메서드를 호출합니다. (https://github.com/joscha/play-authenticate/tree/master/samples/java/play-authenticate-usage)

내가 콘솔에서 다음과 같은 오류를 얻을.

[error] application - Access to [/test/launch?testId=2] requires a subject, but no subject is present. 
[warn] application - Deadbolt: Access failure on [/test/launch?testId=2] 

이고 결과 div에는 로그인 페이지가 표시됩니다. 대신 로그인 페이지로 리디렉션하고 로그인 후에 메소드 호출을 실행하려고합니다.

statusCode 및 ajaxError를 추가하려고 시도했지만 응답 헤더 상태가 200이고 성공 div가 실행될 때마다 결과 div에 로그인 양식이 표시됩니다.

답변

2

DeadboltHandler 구현의 onAuthFailure를 변경해야하는 것처럼 보입니다. 예제 코드에서 복사 한 코드는 403을 반환합니다. 대신 로그인 페이지로 리디렉션해야합니다.

+0

스티브, 나는 금지 된 것을 주석 처리했으며 리디렉션하도록 설정했습니다. // return forbidden ("Forbidden"); return redirect (PlayAuthenticate.getResolver(). login()); –

+0

로그인 페이지에 대한 액세스를 제한하지 않았습니까? –

+0

로그인 페이지에 대한 액세스를 제한하지 않았습니다. 정상적인 요청 (예 : http : // localhost : 9000/project)을 받으면 페이지가 http : // localhost : 9000/login으로 리디렉션됩니다. 위의 메소드에서 ajax 호출은 내부적으로 HTTP 상태 303으로 리디렉션 된 HTTP POST http : // localhost : 9000/launch/demo? id = 1을 생성 한 다음 로그인 페이지 HTML 내용이 데이터로 반환됩니다. –