2

页面参数(在 Seam 中)或 GET 参数(通用)经常被提及作为将信息从一个视图传输到另一个视图的适当方法。但显然,在 url 中包含敏感数据并不是一个好主意,例如 //myserver/show.jsf?userId=12,因为很容易操纵这些参数并查看不允许查看的数据。

到目前为止,我一直在使用示例和文献显示的内容(因为到目前为止并不重要):

<s:link..>
<f:param value="#{user.id}" name="userId" /> 
</s:link>

在 JSF 文件和相应的目标 page.xml 中

<param name="userId" value="#{userHome.userId}" />   

我对两件事感兴趣(对 Seam 来说仍然是新事物):

1)如果您想坚持页面参数,您正在使用哪些不同的可能策略来保护未经许可的访问,例如不同的用户帐户?我相信你们中的一些人已经面临这个挑战。这些策略的优缺点是什么。

2) 我想在项目中到处使用 Seam EntityHome 对象,因为它可以轻松处理实体和某种 DAO 结构 - 但是如果不使用页面参数,如何有效地使用 HomeObjects?

非常感谢你们的一些想法和经验。非常感谢。

乔希

4

1 回答 1

0

GET 参数本身并不是不安全的,所有 REST 服务都依赖于放入 URL 中的数据。如果您的用户详细信息页面(在您的示例中)不检查您是否确实有权访问用户帐户“12”,则参数(GET 或 POST)是不安全的。另外,不要认为 POST 参数比 GET 参数更难操作。

因此,您的代码应该检查您是否有权查看敏感数据。要处理未经授权的访问,如果用户设置了他无权获得的 ID ,您只需org.jboss.seam.security.AuthorizationException在方法中抛出一个。setUserId()启动这个异常使 Seam 遵循中描述的异常处理机制pages.xml(默认情况下它重定向到/error.xhtml带有错误消息的页面)。

@In Identity identity;  // The standard Seam Identity component
@In Long sessionUserId; // You should outject this during user login

public void setUserId(Long userId) {
  // Grant access is user is an admin or his id is the same as the one
  // he is trying to set. Otherwise, exception.
  if (!identity.hasRole('admin') && !sessionUserId.equals(userId)) {
    throw new AuthorizationException("Not authorized");
  }
  this.userId = userId;
}
于 2012-06-06T16:14:07.793 回答