gpt4 book ai didi

java - 防止 EL 访问 session 属性

转载 作者:搜寻专家 更新时间:2023-11-01 02:53:37 25 4
gpt4 key购买 nike

我了解如何在我的 JSP/Servlet 应用程序中使用 EL 访问 session 属性:

    <p> Hello <c:out value="${sessionScope.userName}"/> </p>

但是,我想知道是否有办法从 JSP 页面 EL 访问中隐藏 Session 变量?如果我在我的 servlet 中设置一个 session 变量,例如:

    UserDAO user = new UserDAO();
user.setUserName("XYZ");
request.getSession().setAttribute("user", user);

有没有一种方法可以防止使用某些代码在 JSP 上访问 UserDAO Java 对象的字段,例如:

    <p> Hello <c:out value="${user.userName}"/> </p>

谢谢。

最佳答案

没有。至少,不是没有编写一个非常简单的自定义 EL 解析器。

最好的办法是将它包装在一个不通过 Javabean getter 方法公开值的对象中。例如

public class UserWrapper implements Serializable {

private User user;

public UserWrapper(User user) {
this.user = user;
}

public User get() {
return user;
}

}

改为将其存储在 session 中,如下所示。

session.setAttribute("user", new UserWrapper(user));

改为从 session 中获取它,如下所示。

User user = ((UserWrapper) session.getAttribute("user")).get();

此方法在 EL 中不可访问。至少,在 2.2 之前的 EL 版本中,否则您可以执行 #{user.get()}

替代方案是使包装类的 getter 方法受包保护,以便它只能由同一包和/或子类中的类访问(EL 即要求它是公共(public)的)。

    protected User get() {
return user;
}

或者甚至使整个包装类成为私有(private)或包保护的内部类。

关于java - 防止 EL 访问 session 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6337453/

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