java – 通过Servlet进行身份验证
我的情况如下:
我在Tomcat上运行了2个Web应用程序.最初用户登录到应用程序1然后.有一个指向应用程序2的链接.在单击链接时,应将用户重定向到第二个应用程序. 两个应用程序使用LDAP身份验 现在,这里的问题是第二个应用程序有自己的身份验证系统. 因此,我们计划隐式验证在第一个系统中登录的用户. 我编写了一个servlet,当我在App1中单击App2的链接时会执行该servlet. 我试图使用下面的代码,它应该在给定参数的app2上调用Servlet“ldap-login”.参数名称是正确的. String targetURL = "http://localhost:8080/app2/ldap-login"; HttpClient client = new HttpClient(); PostMethod doPost = new PostMethod(targetURL); //doPost.getParams().setBooleanParameter(HttpMethodParams.USE_EXPECT_CONTINUE,true); doPost.addParameter("login_netid","alice"); doPost.addParameter("login_password","alice"); try { int status = client.executeMethod(doPost); if (status == HttpStatus.SC_OK) { // redirect response.sendRedirect("http://localhost:8080/app2/myPage"); } else { System.out.println("Service failed,Response Code= " + HttpStatus.getStatusText(status)); System.out.println("Response Body --> " + doPost.getResponseBodyAsString()); } } catch (Exception ex) { System.out.println("ERROR: " + ex.getClass().getName() + " "+ ex.getMessage()); ex.printStackTrace(); } finally { doPost.releaseConnection(); } 但我得到的回应“暂时移动”. 任何人都可以建议我替代? 解决方法
302 Moved Temporarily响应只是一个重定向.这正是你做response.sendRedirect()时会得到的那种响应.您也可以很好地获得重定向作为对成功登录的响应.我建议在第二个应用程序验证登录成功时是否确实重定向.然后,您应该检查响应代码是302而不是200.或者,您需要告诉HttpClient自动跟踪任何重定向.
更重要的是,如果登录实际上失败了,你会从第二个应用程序得到什么样的响应?它会抛出异常,从而返回500的响应代码吗?或者它只是在请求范围内有条件地设置一些错误消息并通过转发重新显示JSP,从而保持响应代码为200?那么如何在成功登录时区分失败登录200和200? 与具体问题无关,如果第二个应用程序与第一个应用程序不共享同一会话,则您的方法可能不起作用.登录通常存储在会话中,但您不会在任何地方维护会话.无论如何,这是一个新问题的主题:) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |