【问题标题】:How to redirect to request page after basic athentication on websphere在 websphere 上进行基本身份验证后如何重定向到请求的页面
【发布时间】:2013-01-15 13:56:30
【问题描述】:

我正在尝试使用HttpServletRequest.login 方法登录用户。我已经设置了我的web.xml,创建了一个login.xhtml,并将登录按钮的操作映射到我称为performLogin 的支持bean 方法

问题是从用户被重定向的地方获取 URL。 IE。他试图去index.xhtml,但没有会话,所以被重定向到login.xhtml。我想首先获取他请求的 url,所以我尝试从请求映射中读取 RequestDispatcher.FORWARD_REQUEST_URI,如 balusC 所述:JSF 2.0 : How to redirect to the protected page after using HttpServletRequest.login

这在使用 websphere 时不起作用,我猜是因为它不转发,而是将用户重定向到登录页面。但是,由于 Websphere 本身在使用 http-form 中内置的 j_security_check 操作时能够进行正确的转发,所以这一定是可以完成的!

所以,我的问题基本上是;在 websphere 上运行时,如何获取此 uri 以便在成功登录时将用户转发到正确的页面?

【问题讨论】:

  • 很抱歉没有为您的问题提供解决方案,但是如果应用程序服务器可以以声明方式为您完成,您为什么要使用登录并自己进行身份验证?使用web.xml 定义security-constraintlogin-configlogin 页面,并让流程由WAS 管理。它可以为您节省大量时间。
  • 我需要获取输入的用户名和密码,因为在与也具有基本身份验证的 REST Web 服务通信时,我将其用作标头参数。这些将部署在使用相同 LDAP 的不同服务器上。如果我让处理它,我将无法获取密码,只能获取主体的用户名。因此,只要会话对 Web 应用程序有效,它就能够使用他在登录表单中键入的相同凭据与其余服务进行通信。

标签: jsf redirect jsf-2 websphere basic-authentication


【解决方案1】:

要获取您在 websphere 上被重定向的 url,您可以读取名为 WASReqURL 的 cookie。你在这里得到的 uri 包括主机名、端口和上下文路径,所以我在我的方法中删除了这些:

private String getRedirectUrl() {
    Map<String, Object> cookies = FacesContext.getCurrentInstance().getExternalContext().getRequestCookieMap();

    if (cookies.containsKey(WAS_REDIRECT_COOKIE_NAME)) {
        Cookie cookie = (Cookie) cookies.get(WAS_REDIRECT_COOKIE_NAME);

        String url = cookie.getValue();

        String context = FacesContext.getCurrentInstance().getExternalContext().getRequestContextPath();

        if (url != null && url.contains(context)) {
            url = url.substring(url.indexOf(context) + context.length() + 1);
        }

        return url;
    }
    return null;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-05-26
    • 1970-01-01
    • 1970-01-01
    • 2018-10-20
    • 1970-01-01
    • 1970-01-01
    • 2017-04-20
    相关资源
    最近更新 更多