【发布时间】:2011-12-16 14:47:12
【问题描述】:
我们正在使用 JSF2 并使用 Navigation Handler 来控制我们的 Web 应用程序的公共页面和安全页面之间的导航。
逻辑变得如此复杂,以至于我们需要检查哪个页面是安全的,哪个页面是公开的。
是否有任何框架或更好的方法来处理导航处理程序...
【问题讨论】:
标签: jsf-2
我们正在使用 JSF2 并使用 Navigation Handler 来控制我们的 Web 应用程序的公共页面和安全页面之间的导航。
逻辑变得如此复杂,以至于我们需要检查哪个页面是安全的,哪个页面是公开的。
是否有任何框架或更好的方法来处理导航处理程序...
【问题讨论】:
标签: jsf-2
通常您将受保护的页面放在公共 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 本身不包括模式)。
【讨论】:
web.xml 被声明为符合 Servlet 3.0 版本。跨度>