如何在Java HttpServer中处理失败的身份验证

时间:2012-04-23 22:03:42

标签: java http authentication com.sun.net.httpserver

我在基于com.sun.net.httpserver.HttpServer的Java程序中实现了一个小型HTTP服务器,它也使用基本身份验证。这一切都运行正常,但是,我想处理任何失败的身份验证请求。

默认情况下,当用户无法进行身份验证时(当她点击浏览器登录弹出窗口中的“取消”按钮时),会将空白页面发送回客户端;不调用HttpHandler的handle()方法。

我有什么想法可以在我的程序中捕获这些失败的身份验证尝试?

谢谢!

2 个答案:

答案 0 :(得分:1)

看一下这些文档......我想你可以通过从Authenticator返回一个Authenticator.Retry Result并在其中指定一个新的标题“Location:http://mysite/loginpage”或者你想要的任何东西来做到这一点重定向到(只记得你需要指定绝对URL,从http://开始,而不是相对url / loginpage)

编辑: 如果您正在使用BasicAuthenticator的子类,您还需要覆盖authenticate方法,您将需要查看原始源代码(请参阅http://xantorohara.blogspot.com/2008/07/sources-of-comsunnethttpserverhttpserve.html)以查看原始身份验证方法的作用... 或者您可以尝试使用authenticate()方法来查看super.authenticate()返回的内容,如果是失败,则使用Location:header发送重试

答案 1 :(得分:0)

我不知道在Authenticator之前是否调用了过滤器(您可以通过在过滤器中将som调试信息打印到控制台并查看是否在Authenticator“踢出”之前将其写入控制台来查找。)如果是这样您可以通过创建在身份验证之前运行的过滤器并将用户重定向到错误页面来执行此操作