2011-05-21 54 views
4

我尝试编写一个登录表单,它将用户名和密码传递给servlet并让用户登录。Java EE登录页面问题

然后,在servlet,我是劳

request.login(username, password); 

但它抛出异常,它无法对用户进行认证。

String authType = request.getAuthType(); 
if(authType != null) { 
request.login(username, password); 
} 
  1. 我不知道如何编写一个简单的登录页面。
  2. request.authenticate(response)的用法是什么;

我试了一下,它弹出一个无法继续进行的屏幕。

  1. 我尝试引用这个页面http://download.oracle.com/javaee/1.4/tutorial/doc/Security5.html,我认为需要在登录之前先配置身份验证并添加一些用户。

请帮忙。

谢谢。

回答

4

使用HttpServletRequest#login()方法表明您正在使用属于Java EE 6的Servlet 3.0。但是您正在阅读一本有7.5年历史的J2EE 1.4教程。我建议把那个尘土飞扬的教程放在一边,然后阅读Java EE 6 tutorial。集装箱托管安全开始here

回到你的具体问题,login()会(as documented)抛出一个异常时的登录无效或当容器没有任何境界 definied可言。假设你确定用户名/密码是有效的,它可能是最后一个原因。如何做到这一点完全取决于有问题的servletcontainer。只需使用关键字“Realm”查阅其文档。例如,对于Tomcat 7.0,这是Realm Configuration HOW-TO。如果您在SQL数据库中拥有用户名/密码,则可能需要使用JDBCRealm

一旦你已经配置在servletcontainer水平境界,那么你就可以使用login()方法,你想要的方式。根据Java EE 6教程,不要忘记将<security-constraint>添加到web.xml,以限制对某些URL模式的访问并指定登录页面的URL。

+0

如何使用glassfish配置realm servlet容器级别? – peterwkc 2011-05-21 06:24:11

+0

它的工作原理。谢谢你的帮助。 – peterwkc 2011-05-21 07:02:15

+0

不客气。在GlassFish中,您可以在管理控制台的* Configuration> Security> Realms *部分对其进行配置。您可以在这里找到一个简洁的博客,其中概述了如何配置JDBCRealm(使用MySQL的JDBC连接池):https://www.infosecisland.com/blogview/5522-Configuring-Security-in-Glassfish-v3.html – BalusC 2011-05-21 13:04:55