gpt4 book ai didi

java - JAAS,从容器外部进行登录

转载 作者:行者123 更新时间:2023-11-30 05:01:55 27 4
gpt4 key购买 nike

我有一个带有 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 登录模块时(或者至少以容器无法识别的方式),容器将不会意识到主题和主体集(与subject)由容器存储和管理。

当您使用容器管理的身份验证方案之一时,容器实际上将主题存储在 Session 实现类中(至少在 Tomcat 6 中是这样),其方式对开发人员完全不透明;在 session 对象上使用getAttribute()永远不会返回Subject,也不能使用setAttribute()来覆盖Subject。当需要时,主题从该 session 字段中检索并由容器用于各种目的;例如,当您在 HttpServletRequest 对象上调用 getUserPrincipal()getRemoteUser() 时,与主题关联的主体实际上用于返回结果。

如果您需要让容器为您完成所有这些繁重的工作,那么您需要将 JAAS 登录模块与容器管理的身份验证方案结合使用。如果您不想走这条路,那么您需要在 session 期间“记住”主题和校长;不要忘记,所有这一切都必须以安全的方式完成。

关于java - JAAS,从容器外部进行登录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6374489/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com