我在我的网络应用程序上安装并运行了PicketLink,但似乎无法按组或角色保护文件夹等资源。 PicketLink AuthenticationFilter(org.picketlink.authentication.web.AuthenticationFilter)没有提供任何方式来说明哪个url-pattern属于哪个组或角色。我如何保护管理员目录,以便只有管理员组中的用户可以访问它?现在,如果您已登录,则可以访问所有内容。
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 :(得分:2)
如前所述,AuthenticationFilter仅与身份验证有关。
PicketLink团队正在提供完整的Servlet安全支持,该支持将为您的应用程序的URI提供基于角色和组的授权。
目前,我建议您创建自己的过滤器。
答案 1 :(得分:2)
除非我完全误解了你想要做的事情,否则我认为你可以通过编程配置界面做你想做的事。 See the docs section 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");
}
}