Как аутентифицировать пользователей по декларативным ролям? - PullRequest
2 голосов
/ 27 октября 2010

Как можно настроить Seam для использования разных ограничений безопасности для разных коллекций веб-ресурсов?

В web.xml я включил такие разделы, как

<security-constraint>
    <web-resource-collection>
        <web-resource-name>AdminPages</web-resource-name>
        <url-pattern>/secure/*</url-pattern>
    </web-resource-collection>
    <auth-constraint>
        <role-name>admin</role-name>
    </auth-constraint>
</security-constraint>

<security-role>
    <role-name>admin</role-name>
</security-role>

Если я опущуКонфигурация выше (web.xml).Пользователь аутентифицирован (только пароль) с использованием JAAS.Я бы предпочел не писать код для Authenticatin, мне действительно нужно только проверить, что у пользователя есть требуемая роль (admin).

В Seam это не работает так, как ожидалось.Я получаю HTTP-код ошибки 403 при попытке доступа к страницам в /secure/*

Я настроил в components.xml Это работает, когда web.xml не изменился.

<security:identity jaas-config-name="admins" />

И jboss-web.xml

<jboss-web>
    <security-domain>java:/jaas/admins</security-domain>
</jboss-web>

Вопрос в том, где мне настроить роль.

Ответы [ 2 ]

4 голосов
/ 27 октября 2010

Вы должны настроить новый домен безопасности на JBoss.

Например:

<policy>
    <application-policy name="testUsersRoles">
        <authentication>
            <login-module code="org.jboss.security.auth.spi.UsersRolesLoginModule"
                          flag="required">
                <module-option name="usersProperties">usersb64.properties</module-option>
                <module-option name="hashAlgorithm">MD5</module-option>
                <module-option name="hashEncoding">base64</module-option>
                <module-option name="unauthenticatedIdentity">nobody</module-option>
            </login-module>
        </authentication>
    </application-policy>
</policy>

(в файле conf / login-config.xml вашего экземпляра JBoss).

Более подробная информация здесь: Безопасность в JBoss

ОБНОВЛЕНИЕ:

Об элементе «использовать разные ограничения безопасности для разных коллекций веб-ресурсов» вы можете задатьон добавляет разные «ограничения безопасности» для каждой группы ресурсов для управления:

<security-constraint>
    <web-resource-collection>
        <web-resource-name>AdminPages</web-resource-name>
        <url-pattern>/secure/*</url-pattern>
    </web-resource-collection>
    <auth-constraint>
        <role-name>admin</role-name>
    </auth-constraint>
</security-constraint>


<security-constraint>
    <web-resource-collection>
        <web-resource-name>CommonUserPages</web-resource-name>
        <url-pattern>/common/*</url-pattern>
    </web-resource-collection>
    <auth-constraint>
        <role-name>admin</role-name>
        <role-name>commonUser</role-name>
    </auth-constraint>
</security-constraint>

<security-role>
    <role-name>admin</role-name>
    <role-name>commonUser</role-name>
</security-role>

Обратите внимание, что обе роли будут извлечены ассоциированным LoginModule во время входа в систему.Поэтому, когда ваш LoginModule аутентифицирует пользователя, он получает набор ролей, к которым принадлежит этот пользователь.

1 голос
/ 20 декабря 2011

Использование пользовательских идентификаторов с методом postAuthenticate.

<security:identity jaas-config-name="admins" class="my.Identity"/>

Пример кода:

package my;

public class Identity extends org.jboss.seam.security.Identity {

    private static final long serialVersionUID = 1L;

    @Override
    protected void postAuthenticate() {
        super.postAuthenticate();
        if(isLoggedIn() && !hasRole("admin")) {
            unAuthenticate();
        }
    }
}
...