代码之家  ›  专栏  ›  技术社区  ›  James

访问自定义WebLogic提供程序时出现Internet Explorer错误

  •  0
  • James  · 技术社区  · 16 年前

    我在10.3版上创建了一个自定义WebLogic安全身份验证提供程序,其中包括一个用于验证用户的自定义登录模块。作为提供者的一部分,我实现了servletauthenticationfilter并添加了一个过滤器。该筛选器用作域中所有应用程序的公共登录页。

    当我们通过在地址栏中输入任何安全的URL来访问它们时,在IE和火狐中都可以正常工作。但是当我们把链接加入IE时,会发生一件奇怪的事情。如果我单击书签,您将看到我们的登录页面,然后在您成功登录系统后,将显示基本认证页面,即使用户已经过认证。这在Firefox中从来没有发生过,只有IE。它也是间歇性的。5个IE中有1个时间将正确重定向,并且不显示基本身份验证窗口。火狐和Opera每次都会正确重定向。我们捕获了响应头并比较了成功和失败,它们是相同的。

    final boolean isAuthenticated = authenticateUser(userName, password, req);
    
            // Send user on to the original URL
            if (isAuthenticated) {
                res.sendRedirect(targetURL);
                return;
            }
    

    如您所见,一旦用户通过身份验证,我将重定向到原始URL。我错过了一步吗?authenticateuser()方法是从Oracle文档中的一个示例中逐字提取的。

    private boolean authenticateUser(final String userName, final String password, HttpServletRequest request) {
    
        boolean results;
    
        try {
            ServletAuthentication.login(new CallbackHandler() {
    
                @Override
                public void handle(Callback[] callbacks)
                        throws IOException, UnsupportedCallbackException {
    
                    for (Callback callback : callbacks) {
                        if (callback instanceof NameCallback) {
                            NameCallback nameCallback = (NameCallback) callback;
                            nameCallback.setName(userName);
                        }
    
                        if (callback instanceof PasswordCallback) {
                            PasswordCallback passwordCallback = (PasswordCallback) callback;
                            passwordCallback.setPassword(password.toCharArray());
                        }
                    }
                }
            }, request);
            results = true;
        } catch (LoginException e) {
            results = false;
        }
    
        return results;
    

    我在这里问这个问题是因为我不知道问题是与WebLogic配置还是代码有关。如果这个问题更适合ServerFault,请告诉我,我会在那里发布。

    奇怪的是,它每次在Firefox和Opera中都能工作,但在Internet Explorer中却不行。我希望不使用Internet Explorer是一个选项,但它目前是公司标准。如有任何帮助或指示,我们将不胜感激。我已经对IE6&8进行了测试,并在3个不同的环境中部署了定制的提供者,我仍然可以复制这个bug。

    1 回复  |  直到 16 年前
        1
  •  1
  •   James    16 年前

    我们解决了。

    修复方法是禁用WebLogic服务器上的身份验证cookie。出于某种原因,Internet Explorer会丢失cookie,导致Weblogic认为会话被黑客攻击。这就是导致基本身份验证登录的原因。

    我们仍然不知道是什么导致IE丢失了cookie,但是这个提供者是为一个内部网提供的,所以修复不会损害我们的整体安全性。

    我希望这能帮助别人。

    推荐文章