J2EE表现层设计思考 - 编程入门网
</role-name>
</auth-constraint>
</security-constraint>
设置资源保护的一个简单方法 有一个简单和常见的方法可以限制一个客户直接访问某个资源,例如JSP。和3.3的例子一样,这个方法无需修改任何的配置文件。这个方法只是需要将资源放置在Web应用的/WEB-INF/目录下。例如,要防止浏览器直接访问一个称为info.jsp的视图,我们假设这个文件是属于一个名字为securityissues的Web应用。我们可以将该JSP文件放在以下的子目录:/securityissues/WEB-INF/internalaccessonly/info.jsp。 对于/WEB-INF/目录及其子目录是禁止浏览器直接访问的,因此info.jsp也不可以直接访问。不过,如果需要,一个控制器servlet仍然可以导向到这个资源。这种控制使用的是all-or-nothing的方式,因为以这种方式配置的资源都完全禁止浏览器直接访问。 重复的Form提交 用户使用浏览器时,可以经常使用向后的按钮,因此就有可能重复提交一个他们已经提交过的form,这样就会带来一个重复事务处理的问题。同样,一个用户也可能在接收到一个确认的页面之前按下停止的按钮,接着再次提交同一个form。对于这些情况,我们都想跟踪并且禁止这些重复的提交,我们可以使用一个控制servlet来提供一个控制点,以解决这个问题。 同步记号(Synchronizer (or Dvu) Token) 这个策略是为了解决重复的form提交问题。一个同步的记号被设置在一个用户的Session中,并且包含在返回到客户的每一个form中。当form被提交时,form中的同步标记就和Session中的同步标记作对比。在form首次提交的时候,这两个标记应该是一样的。如果标记不一样,那么该form就会禁止提交,一个错误就会返回给用户。在用户提交一个form时,如果按下浏览器中的后退按钮并尝试重新提交同一个form时,标记就会出现不匹配的现象。 另一方面,如果两个标记值匹配,那么我们就可以确信整个流程是正确的。在这种情况下,Session中的标记值就会被修改为一个新的值,同时允许提交该form。 你也可以使用这个策略来控制对某些页面的直接访问,就好象上面资源保护中描述的一样。例如,假设一个用户将某个应用的页面A收藏到收藏夹中,而页面A只允许通过页面B和C访问。当用户直接通过收藏夹来访问页面A,这时页面的访问顺序就是不正确的,这样同步标记将处在一个不同步的状态,或者它根本就不存在。不论怎样,访问都被禁止了。 J2EE表现层设计思考(5)时间:2010-07-08验证 通常我们都希望同时在客户和服务器端进行验证。虽然客户端的验证处理看来没有服务器端验证那样专业,不过它可以提供高级别的检查,例如验证form中的某个字段是否为空。服务器端的验证通常要广泛得多。虽然在一个应用中,两种类型的处理都是适当的,不过这里不建议只使用客户端的验证。这样做的一个主要原因是由于客户端的验证是使用客户端的脚本语言的,用户可以在任何时候通过设置,从而跳过这些脚本。 这里不打算很详细地讨论验证的策略。我们只是在这里提及一下这是一个在设计系统时需要考虑到的问题,如果你想更深入地了解,你可以参考现有的文献。 在客户端验证 输入的验证在客户端进行。通常这个操作都是通过嵌入的脚本代码例如JavaScript进行。上面已经提到,客户端的验证是服务器端验证的一个补充,不过不应该独立使用。 在服务器端验证 输入的验证在服务器端进行。有几个典型的策略可用作服务器端验证。这些策略是Form-Centric Validation(以Form为中心的验证)和validation based on abstract types(基于抽象类型的验证)。 Form-Centric Validation Form-Centric Validation的策略强迫一个应用包含许多的方法来验证form各部分的状态。典型地,这些方法依据其包含的逻辑,都是交迭的,这样不利于重新使用 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |