Как настроить PicketLink AuthenticationFilter?

У меня установлено и работает PicketLink в моем веб-приложении, но кажется, что я не могу защитить ресурсы, такие как папки, по группе или роли. PicketLink AuthenticationFilter (org.picketlink.authentication.web.AuthenticationFilter) не предоставляет никакого способа сказать, какой шаблон URL принадлежит какой группе или роли. Как бы я защищал каталог администратора, чтобы к нему могли иметь доступ только пользователи из группы администраторов? Прямо сейчас, если вы вошли в систему, вы можете получить доступ ко всему.

файл web.xml:

        <filter>
            <filter-name>PicketLinkAuthenticationFilter</filter-name>
            <filter-class>org.picketlink.authentication.web.AuthenticationFilter</filter-class>

            <init-param>
                <param-name>authType</param-name>
                <param-value>FORM</param-value>
            </init-param>
        </filter>

        <filter-mapping>
            <filter-name>PicketLinkAuthenticationFilter</filter-name>
            <url-pattern>/admin/*</url-pattern>
            <url-pattern>/standarduser/*</url-pattern>
        </filter-mapping>

Я пытался создать свой собственный AuthenticationFilter, но не смог. Я бы очень хотел, чтобы я мог сделать что-то, как весной. Нечто подобное или использование функций IDM, таких как hasRole или isMember:

    <intercept-url pattern="/admin/*" access="ADMIN" />
    <intercept-url pattern="/member/*" access="ADMIN,STANDARDUSER" />

2 ответа

Решение

Если я полностью не пойму, что вы пытаетесь сделать, я думаю, что вы можете делать то, что вы хотите, через программный интерфейс конфигурации. См. Раздел 12.2 документации.

public class HttpSecurityConfiguration {

public void configureHttpSecurity(@Observes SecurityConfigurationEvent event) {
    SecurityConfigurationBuilder builder = event.getBuilder();

    builder
        .http()
            .forPath("/*.jsf")
                .authenticateWith()
                    .form()
                        .loginPage("/login.jsf")
                        .errorPage("/loginFailed.jsf")
            .forPath("/admin/*")
                .authorizeWith()
                    .role("Administrator");
    }
}

Как было сказано ранее, AuthenticationFilter предназначен только для аутентификации.

PicketLink Team работает в полной поддержке Servlet Security, которая, среди прочего, обеспечит авторизацию на основе ролей и групп для URI вашего приложения.

На данный момент, я бы предложил вам создать свой собственный фильтр.

Другие вопросы по тегам