我在Web应用程序上安装并运行了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" />

最佳答案

除非我完全误解了您要执行的操作,否则我认为您可以通过编程配置界面来执行您想要的操作。 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");
    }
}

07-22 09:20