1

我的 Web 应用程序有一个安全区域,用户可以通过 JSP 登录该区域。JSP 将用户名和密码发送到一个 servlet,然后由该 servlet 检查用户凭证是否有效。如果它们有效,则将用户定向到安全资源。如何确保用户不能在不先验证的情况下导航到安全资源?

4

4 回答 4

6

一种常见的方法是在用户的会话中设置一个令牌,即

session.setAttribute("loggedIn", "true");

甚至

session.setAttribute("loggedInUser", "someUserName");

并在任何应保护的页面上进行检查。一个好的策略是使用附加到任何要保护的页面的 servlet 过滤器来执行检查。如果他们没有通过检查,过滤器可以重定向到登录页面。另见此处:http: //java.sun.com/products/servlet/Filters.html

这是一篇关于使用过滤器进行身份验证的好文章:http: //www.developer.com/java/ent/article.php/3467801

于 2008-12-07T21:42:52.710 回答
4

在 web.xml 中使用安全约束怎么样:

<security-constraint>
      <web-resource-collection>
         <web-resource-name>Secure</web-resource-name>
         <url-pattern>/secure/*</url-pattern>
      </web-resource-collection>
于 2008-12-08T11:53:04.977 回答
0

确保人们始终通过单个 servlet 访问您的应用程序,其中 servlet 将请求发送到 JSP,并将结果响应返回给浏览器。这样,您将始终控制发生的事情,因为只有一个入口点。

另一种方法是使用会话变量(服务器端,甚至在 cookie 中),每个需要身份验证的 JSP 都会对其进行检查。

于 2008-12-07T21:43:53.210 回答
0

安全性真的很难做到。比你通常想象的要多得多。必须使用框架(想到Acegi ),或者LenW 指出的 web.xml 的标准“”部分是必须的!至少使用过滤器来处理安全的授权部分。

我不太喜欢使用单点入口的解决方案(如Rolf 所建议的)。在我看来,这似乎是对您的架构施加的人为约束。在一个 webapp 中有多个 servlet 有很多很好的理由。

无论您做什么,都不要使用在每个页面上都依赖手动代码的技术(例如:每个 JSP 都以“if user_authentified ...”开头)。你会忘记把它放在某个地方......

于 2008-12-08T12:18:15.550 回答