JAAS,从容器外部进行登录

| 我有一个使用JAAS的应用程序,我需要从旧版进行外部登录,因此我用下面的代码编写了一个Servlet,它可以正常工作,但是当我再次提交时,JAAS再次尝试进行身份验证并失败,并且用户重定向到登录页面。 这是doPost方法:
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
        throws ServletException, IOException {

    NfWebCallbackHandler callbackHandler = new NfWebCallbackHandler(req);

    LoginContext loginContext = null;

    boolean loginSuccess = true;

    try {
        loginContext = new LoginContext(\"MyLoginContext\", callbackHandler);
        loginContext.login();
    } catch (LoginException e) {
        loginSuccess = false;
        RequestDispatcher dispatcher = req
                .getRequestDispatcher(\"/login.jsf\");
        dispatcher.forward(req, resp);
        e.printStackTrace();

    }
    if (loginSuccess) {

        RequestDispatcher dispatcher = req.getRequestDispatcher(req
                .getParameter(\"targetUrl\"));
        dispatcher.forward(req, resp);
    }

}
任何想法都欢迎!谢谢!     
已邀请:
        当您在容器权限范围之外(或至少在容器无法识别的方式中)使用JAAS登录模块时,容器将不会意识到以下事实:主题和主体集(与主题相关联)是由容器存储和管理。 当您使用一种容器管理的身份验证方案时,容器实际上以对开发人员完全不透明的方式将主题存储在Session实现类中(至少在Tomcat 6中是这样)。在会话对象上使用
getAttribute()
不会返回主题,也不能使用
setAttribute()
覆盖主题。需要时,可以从此会话字段中检索主题,并由容器用于各种目的;例如,当您在
HttpServletRequest
对象上调用
getUserPrincipal()
getRemoteUser()
时,实际上与主题关联的Principal会返回结果。 如果您需要让容器来完成所有这些繁重的工作,则需要将JAAS登录模块与容器管理的身份验证方案结合使用。如果您不想这样做,则需要在会话期间“记住”主题和主体。不要忘记,所有这些都必须以安全的方式完成。     
        我忘记为这种情况注册我的解决方案,我使用了此类: org.jboss.web.tomcat.security.login.WebAuthentication 我写了这样的东西:
        WebAuthentication webAuthentication = new WebAuthentication();
        req.getSession().setAttribute(\"webAuthentication\", webAuthentication);
我不记得我在哪里找到的,但是非常有用! Thanx Vineet Reynolds,唯一一位试图帮助我的人     

要回复问题请先登录注册