【问题标题】:JSF2 Navigation HandlerJSF2 导航处理程序
【发布时间】:2011-12-16 14:47:12
【问题描述】:

我们正在使用 JSF2 并使用 Navigation Handler 来控制我们的 Web 应用程序的公共页面和安全页面之间的导航。

逻辑变得如此复杂,以至于我们需要检查哪个页面是安全的,哪个页面是公开的。

是否有任何框架或更好的方法来处理导航处理程序...

【问题讨论】:

    标签: jsf-2


    【解决方案1】:

    通常您将受保护的页面放在公共 URL 路径中,例如 /app/*/secured/*/private/* 等。这样您可以使用单个入口点来控制访问。如果您使用的是container managed security,则需要指定正确的 URL 模式:

    <security-constraint>
        <web-resource-collection>
            <web-resource-name>Restricted pages</web-resource-name>
            <url-pattern>/secured/*</url-pattern>
        </web-resource-collection>
        <auth-constraint>
            <role-name>*</role-name>
        </auth-constraint>
    </security-constraint>
    

    但是,如果您使用的是本地安全,那么您需要为此实现 Filter

    @WebFilter("/secured/*")
    public class AuthorizationFilter implements Filter {
        // ...
    }
    

    或者当您还没有使用 Servlet 3.0 时,请按如下方式注册它,而不是使用 @WebFilter

    <filter>
        <filter-name>authorizationFilter</filter-name>
        <filter-class>com.example.AuthorizationFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>authorizationFilter</filter-name>
        <url-pattern>/secured/*</url-pattern>
    </filter-mapping>
    

    doFilter() 方法中,您需要编写代码来检查用户是否已登录,然后继续执行链或将响应重定向到登录页面(当然,同一 URL 本身不包括模式)。

    另见:

    【讨论】:

    • 我们可以在过滤器中使用 JSF 托管 bean 吗?
    • 请查看我的答案下方的“另请参阅”链接以获取更具体的过滤器示例以及此相关链接:stackoverflow.com/questions/2633112/…
    • jsf2是否支持servlets3.0
    • 这种支持不是 JSF 特定的。这种支持是特定于容器的。 JSF 2.0 至少需要 Servlet 2.5,因此可以在 Servlet 3.0 或更高版本上正常工作。 Servlet 3.0 容器是 Tomcat 7、Glassfish 3、JBoss AS 6 等。如果您已经拥有它,但似乎无法利用新的 Servlet 3.0 功能,那么请确保 web.xml 被声明为符合 Servlet 3.0 版本。跨度>
    猜你喜欢
    • 1970-01-01
    • 2012-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多