我正在开始一个需要PrimeFaces 5.0组件的新JavaEE7项目。 JSF实现是Mojarra 2.2.0。
设置初始项目依赖项后,我开始实现用户会话的处理,并正常处理viewExpiredException。
第一步,我将下面的代码添加到web.xml中,因此在Session过期后,用户将被重定向到适当的页面。优异。
<error-page>
<exception-type>javax.faces.application.ViewExpiredException</exception-type>
<location>/exception/sessionexpired.xhtml</location>
</error-page>
之后我在Session过期后添加了PrimeFaces并测试了AJAX组件。不工作! 然后我将下面的代码添加到faces-config.xml中,所以在Session调出后调用AJAX后,用户被重定向到适当的页面。优异。
<factory>
<exception-handler-factory>
org.primefaces.application.exceptionhandler.PrimeExceptionHandlerFactory
</exception-handler-factory>
</factory>
然后我去实现WebFilter来处理这样的授权:
@WebFilter("/*")
public class AuthorizationFilter implements Filter {
@Override
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws ServletException, IOException {
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) res;
HttpSession session = request.getSession(false);
User user = (session != null) ? (User) session.getAttribute("user") : null;
String loginURL = request.getContextPath() + "/login.xhtml";
boolean loginRequest = request.getRequestURI().startsWith(loginURL);
boolean resourceRequest = request.getRequestURI().startsWith(request.getContextPath() + ResourceHandler.RESOURCE_IDENTIFIER);
if (user != null || loginRequest || resourceRequest) {
chain.doFilter(request, response);
} else {
response.sendRedirect(loginURL);
}
}
之后,我正常处理的viewExpiredException消失了(好的,我将处理Filter中的Session),但Session过期后的AJAX请求不再处理。这是否意味着,当我实现WebFilter时,我必须处理其中的所有请求(也检测AJAX调用并进行适当的重定向),我可以丢弃我的web.xml和faces-config.xml配置以获取异常吗?
TIA, D00de。