Jetty UserRealm在第3次登录失败时重定向
问题描述:
如果我有一个自定义的Jetty UserRealm实现并为其进行基本身份验证(使用SSL)进行配置,有没有办法在第三次登录失败后让它进入特定页面?Jetty UserRealm在第3次登录失败时重定向
嗯,真的,我只是想显示一些联系信息给用户,如果他们不能在3次尝试后登录。
替代地是能够显示这是我从
public Principal authenticate(final String username, final Object credentials, final Request request)
方法投掷时其配置为基本认证异常?
感谢 尼尔
答
的BasicAuthenticator
是负责发送403响应时,有在请求没有有效凭证。
望着码头6源,你是最好的选择可能是子类BasicAuthenticator并覆盖public void sendChallenge(UserRealm realm,Response response)
public class MyAuthenticator extends BasicAuthenticator {
@Override
public void sendChallenge(UserRealm realm, Response response) {
int numberOfAttempts = getNumberOfAuthenticationAttempts();
if (numberOfAttempts > 3) {
sendContactDetails(realm, response);
}
else
super.sendChallenge(realm, response);
}
protected int getNumberOfAuthenticationAttempts() { ... }
protected void sendContactDetails(Response response) { ... }
}
显然,这样做的问题是,你没有访问到HttpServletRequest
这可能使跟踪请求尝试更加困难。您可能可以通过HttpConnection.getCurrentConnection()
获得访问权限。否则,BasicAuthenticator
的代码不适用于没有复制/粘贴的扩展名,但对您的情况可能没有问题。
我忽略了跟踪在同一个身份验证尝试中发出的请求数量的问题,这将取决于您的客户端如何连接。
或者,您可以在上下文中设置ErrorHandler
,当调用HttpResponse.sendError
时会使用该上下文,在您的领域中引发异常时将会出现这种情况。
我可能会选择使用第一种方法,因为它更清楚地区分责任。
对于未知凭证Jetty现在发送了500错误https://bugs.eclipse.org/bugs/show_bug.cgi?id=486497您是否知道如何返回登录而不是500错误页面?我有一个扩展的ErrorHandler。我正在尝试挑出500错误并注销用户以清除http头中的基本身份验证:授权:基本QTo = – 2016-04-21 06:07:38