我尝试编写一个登录表单,将用户名和密码传递给servlet并让用户登录。
然后,在servlet中,我好
request.login(username, password);
但它会抛出无法验证用户身份的异常。
String authType = request.getAuthType();
if(authType != null) {
request.login(username, password);
}
我尝试了,它会弹出一个无法继续进行的屏幕。
请帮忙。
感谢。
答案 0 :(得分:4)
HttpServletRequest#login()
方法的使用表明您使用的是Servlet 3.0,它是Java EE 6的一部分。但您正在阅读一本有7。5年历史的J2EE 1.4教程。我建议把那个尘土飞扬的教程放在一边,然后阅读Java EE 6 tutorial。容器管理的安全性开始here。
回到你的具体问题,login()
将(as documented)在登录无效或容器没有任何 Realm 时抛出异常所有。假设您确定用户名/密码有效,则可能是最后一个原因。如何做到这一点完全取决于所讨论的servletcontainer。只需使用关键字“Realm”查阅其文档即可。例如,对于Tomcat 7.0,它是Realm Configuration HOW-TO。如果您在SQL数据库中有用户名/密码,则可能需要使用JDBCRealm。
在servletcontainer级别配置 Realm 之后,您就可以按照自己的方式使用login()
方法了。不要忘记根据Java EE 6教程向<security-constraint>
添加web.xml
以限制对某些URL模式的访问并指定登录页面的URL。