У меня есть 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" />
Если я полностью не понимаю, что вы пытаетесь сделать, я думаю, что вы можете делать то, что хотите, через программный интерфейс конфигурации. См. Раздел 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");
}
}
Как и ранее сказано, AuthenticationFilter предназначен только для проверки подлинности.
Команда PicketLink работает в полной поддержке Servlet Security, которая будет обеспечивать, помимо прочего, авторизацию на основе ролей и групп для URI вашего приложения.
Пока я предлагаю вам создать свой собственный фильтр.