2012-03-18 3 views
3

나는 다음과 같은 부두 설정을 가지고 : 나는 메이븐 부두 플러그인을 통해 임베디드 부두 7.6.1.v20120215을 사용하고JAAS :! role을 통해 로그인 할 때 오류가 발생하는 이유는 무엇입니까?

<New class="org.eclipse.jetty.plus.jaas.JAASLoginService"> 
    <Set name="Name">FOO JAAS Realm</Set> 
    <Set name="LoginModuleName">foo</Set> 
    <Set name="roleClassNames"> 
     <Array type="java.lang.String"> 
      <Item>foo.jaas.principal.UserPrincipal</Item> 
      <Item>foo.jaas.principal.RolePrincipal</Item> 
      <Item>org.eclipse.jetty.plus.jaas.JAASRole</Item> 
     </Array> 
    </Set> 
</New> 

.

내가 가지고있는 양식을 통해 로그인을 시도하면 로그인 필드가/j_security_check에 제대로 전송됩니다. 나는 자신의 LoginModule을 작성했으며,이 LoginModule은 호출되고 사용자를 적절하게 확인합니다. 나는 그들의 교장이 데이터베이스에서 제대로 가져온 것을 볼 수 있습니다. 대신에 보안 페이지에 표시되는

는 부두 나를 보여줍니다

HTTP ERROR 403 

Problem accessing /foo/auth.html. Reason: 

    !role 

내가 정말 무엇을 의미하는지 확실히 모르겠습니다.

나는 내 web.xml 파일에 다음과 같습니다

<security-constraint> 
    <web-resource-collection> 
     <web-resource-name>ADMINISTRATOR</web-resource-name> 
     <url-pattern>/auth.html</url-pattern> 
    </web-resource-collection> 
    <auth-constraint> 
     <role-name>ADMINISTRATOR</role-name> 
    </auth-constraint> 
</security-constraint> 

<login-config> 
    <auth-method>FORM</auth-method> 
    <realm-name>foo</realm-name> 
    <form-login-config> 
     <form-login-page>/login.html</form-login-page> 
     <form-error-page>/authfail.html</form-error-page> 
    </form-login-config> 
</login-config> 

<security-role> 
    <role-name>ADMINISTRATOR</role-name> 
</security-role> 
<security-role> 
    <role-name>USER</role-name> 
</security-role> 

내가 관리자로 로그인하고 있습니다.

부두가 표시하는 숨겨진 JAAS 메시지에 대한 도움은 매우 감사하겠습니다.

답변

1

로그인하는 사용자에게는 /auth.html에서 시행하는 관리자 역할이 없습니다.

커밋 단계에서 JAAS 로그인 모듈은 사용자 역할을 주체 주체에 추가해야합니다. 역할은 jetty.xml 파일에서 Jetty에게 지정하는 Principal을 확장하는 클래스에서 유지됩니다.

당신은 모듈

Set<Principal> subjectPrincipals = subject.getPrincipals(); 


    //add the roles 
    for (String role : userRolesList) { 

     subjectPrincipals.add(new RolePrincipal(role)); 
    } 

RolePrincipalcommit()

이 뭔가를해야 로그인 내가 같은 오류가 발생한 코드의 위 .... 이미 하지만 읽고 나면이었다 역할 클래스

+0

것은이 - - 내 로그인 모듈이 실제로이 역할 주체를 주제에 추가합니다. 사용자는 실제로 그 교장을 가지고 있습니다. 다른 힌트 요? – carlspring

+0

예. 영역 이름이 jetty-web.xml과 web.xml에서 정확히 일치합니까 (위의 코드에 해당하지 않음). 당신의 역할은 무엇입니까? JaasRole 인스턴스? 왜 jetty.xml에서 'roleClassNames'에 3 개의 클래스를 선언할까요? 로그인 모듈 구성 파일에서 debug = true를 지정하고 로그를 보려고 했습니까? –

+0

LoginModule과 Role을 독자적으로 구현했습니다. 영역은 web.xml 및 부두 설치 지점 모두에서 정확합니다. 로그인 모듈이 사용자를 올바르게 확인하고 해당 역할을 해당 주제에 위탁하고 있음을 알 수 있습니다. 오류 메시지는 역할이 어딘가에서 발견되지 않는다는 것을 의미하는 것으로 보입니다. 어쨌든 그것은 나에게 혼란 스럽습니다. – carlspring

2

입니다 : http://wiki.eclipse.org/Jetty/Tutorial/JAAS 는 또한 웹 jetty.xml의를 업데이트하고 추가했다

<Set name="roleClassNames"> 
    <Array type="java.lang.String"> 
     <Item>login.RolePrincipal</Item> 
    </Array> 
</Set> 

이 섹션에서 : 나는 역할에 대한 사용자 정의 만든 주체를 사용하기 때문에

<New class="org.eclipse.jetty.plus.jaas.JAASLoginService"> 

는 "login.RolePrincipal는"(실제로 나는 코드를 상속 바람둥이에서 :) 부두에 응용 프로그램을 이동했다)

+0

안녕 Davor, login.RolePrincipal에 대한 템플릿을 보낼 수 있습니까, 내 응용 프로그램에서 임베디드 부두 구현하려고합니다. –

관련 문제