Что означает ошибка входа в систему через JAAS:! Role? - PullRequest
4 голосов
/ 18 марта 2012

У меня есть следующие настройки Jetty:

<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>

Я использую Embedded Jetty 7.6.1.v20120215 через плагин Maven Jetty.

Когда я пытаюсь войти через формучто у меня есть, поля логинов правильно отправляются в / j_security_check.Я написал свой собственный LoginModule, который вызывается и правильно проверяет пользователей.Я вижу, что их принципалы правильно извлекаются из базы данных.

Вместо того, чтобы показывать защищенную страницу, Jetty показывает мне:

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, отображаемому Jettyбудет очень признателен.

Ответы [ 2 ]

2 голосов
/ 11 сентября 2012

У меня была та же ошибка, и вышеупомянутый код уже был там ... но после прочтения: http://wiki.eclipse.org/Jetty/Tutorial/JAAS Мне также пришлось обновить web-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" (на самом деле я унаследовал код и перемещал приложение с tomcat на jetty :))

1 голос
/ 20 марта 2012

Пользователь, который входит в систему, не имеет роли ADMINISTRATOR, которую вы вводите в /auth.html.

.

На этапе фиксации ожидается, что ваш модуль входа в систему JAAS добавит роли пользователя к субъектным принципалам. Роли хранятся в классе, расширяющем принципала, который вы указываете Jetty в файле jetty.xml.

Ваш модуль входа в систему должен иметь что-то подобное в commit()

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


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

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

RolePrincipal ваш класс роли

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...