您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

JSF 2.0:使用HttpServletRequest.login后如何重定向到受保护的页面

JSF 2.0:使用HttpServletRequest.login后如何重定向到受保护的页面

对于基于容器管理的表单的身份验证,登录页面位于由a打开的掩盖下,RequestDispatcher#forward()因此原始请求URI可作为请求属性使用,其名称由标识RequestDispatcher#FORWARD_REQUEST_URI。请求属性(基本上是请求范围)在JSF中,由提供ExternalContext#getRequestMap()

因此,这应该做到:

private String requestedURI;

@postconstruct
public void init() {
    requestedURI = FacesContext.getCurrentInstance().getExternalContext()
        .getRequestMap().get(RequestDispatcher.FORWARD_REQUEST_URI);

    if (requestedURI == null) {
        requestedURI = "some/default/home.xhtml";
    }
}

public void submit() throws IOException {
    // ...

    try {
        request.login(username, password);
        externalContext.redirect(requestedURI);
    } catch (ServletException e) {
        context.addMessage(null, 
                new FacesMessage(FacesMessage.SEVERITY_ERROR, 
                "Bad login", null));
    }
}

你只需要做出豆@ViewScoped(JSF)或@ConversationScoped代替(CDI)@SessionScoped(绝对不是@RequestScoped;与其一起使用,否则不同的方法的需求<f:param><f:viewParam>)。

Jave 2022/1/1 18:26:44 有343人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶