我正在开发一个 webprojekt,为了最大程度地减少会话膨胀,我主要使用 ViewScoped bean。但是后来我面临的问题是我需要在我的 bean 之间传输客户端用户名和密码(以访问数据库等)。
我已经创建了一个系统,我使用 flash 对象在 bean 之间传输用户名和密码,例如:
public String gotoNextView() {
ExternalContext external = FacesContext.getCurrentInstance().getExternalContext();
external.getFlash().put("user_name", (String) FacesContext.getCurrentInstance().getExternalContext().getFlash().get("user_name"));
external.getFlash().put("password", (String) FacesContext.getCurrentInstance().getExternalContext().getFlash().get("password"));
return "/../../next_view.xhtml";
}
但我担心黑客是否有可能以某种方式操纵客户端,从而欺骗服务器暴露闪存对象!
我正在考虑的另一个解决方案是将 Web 应用程序的所有 JSESSIONID 作为键存储在 Map 中,并将用户名和密码作为值。为了完成这项工作,我想我需要在用户会话结束或到期时调用一个回调方法,以便我可以从 Map 中删除相关的 JSESSIONID。但是该解决方案的问题是我怀疑实现回调的最佳方法是什么,以便我可以 100% 确定在服务器创建新的类似 JSESSIONID 之前删除 Map 条目(即使我知道在这么短的时间内发生的可能性非常小)。
我希望对这个问题有深入了解的人会写下什么是最佳实践和 100% 安全的方法(我也认为大多数使用 JSF webapp 服务器的人都会遇到这个问题,因此这对其他人会有所帮助知道问题的最佳解决方案)。谢谢。