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

1

У меня есть 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" />
  • 0
    Я не думаю, что это возможно. Поэтому я создал свой собственный фильтр для проверки группы и роли после фильтра picketlink.
Теги:
authentication
authorization
picketlink

2 ответа

2
Лучший ответ

Если я полностью не понимаю, что вы пытаетесь сделать, я думаю, что вы можете делать то, что хотите, через программный интерфейс конфигурации. См. Раздел docs 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");
    }
}
  • 0
    это было недоступно в версии 2.6, но теперь оно было добавлено в версию 2.7. Я попытаюсь! мой проект в настоящее время работает с использованием пользовательского фильтра, а также позвольте мне сделать некоторые другие пользовательские вещи тоже.
  • 0
    Спасибо, это работает! Как авторизовать несколько групп и ролей для каждого пути? .AuthorizeWith (). Group ("пользователи, администраторы")
2

Как и ранее сказано, AuthenticationFilter предназначен только для проверки подлинности.

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

Пока я предлагаю вам создать свой собственный фильтр.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню