我了解如何在我的 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/