我们正在使用JSF2并使用导航处理程序来控制我们的Web应用程序的公共页面和安全页面之间的导航。
逻辑变得如此复杂,因为我们需要检查哪个页面是安全的,哪个页面是公开的。
是否有任何框架或更好的方法来处理导航处理程序......
答案 0 :(得分:2)
通常,您将受保护的网页放在一个公共网址路径中,例如/app/*
,/secured/*
,/private/*
等。这样您就可以使用单个入口点来控制访问权限。如果您使用的是container managed security,则需要指定正确的网址格式:
<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()
方法中,您需要编写代码来检查用户是否登录,然后继续链接或将响应重定向到登录页面(当然这不是由相同的网址格式)。