确保用户在Java Web App中进行身份验证

时间:2008-12-07 21:20:33

标签: java security jsp servlets web-applications

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

4 个答案:

答案 0 :(得分: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

答案 1 :(得分:4)

如何在web.xml中使用security-constraint:

<security-constraint>
      <web-resource-collection>
         <web-resource-name>Secure</web-resource-name>
         <url-pattern>/secure/*</url-pattern>
      </web-resource-collection>

答案 2 :(得分:0)

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

另一种方法是拥有会话变量(服务器端,甚至是cookie),每个JSP都需要进行身份验证。

答案 3 :(得分:0)

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

我真的不喜欢使用单一入口点的解决方案(如suggested by Rolf)。在我看来,就像你的架构上的人为约束。在webapp中有多个servlet有很多很好的理由。

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