使用jetty进行代理身份验证

时间:2015-09-11 00:12:27

标签: java authentication servlets jetty proxy-server

我试图找出是否可以使用jetty在Java中进行代理身份验证。我已经能够使用jetty进行基本和摘要式身份验证方案,Jetty可以通过伪代码轻松设置这些身份验证方案,如下所示:

constraint = org.mortbay.jetty.security.Constraint();
constraint.setName(constraint.('__BASIC_AUTH'))
constraint.setRoles({'admin'});
constraint.setAuthenticate(true);
constraintMapping = ConstraintMapping();
constraintMapping.setConstraint(constraint);
constraintMapping.setPathSpec('/*');
securityHandler = SecurityHandler();
securityHandler.setUserRealm(myrealm);
securityHandler.setConstraintMappings(constraintMapping );

同样,对于DIGEST身份验证,__BASIC_AUTH可以替换为__DIGEST_AUTH。我正在使用HttpServlets来处理请求/响应。但是,如果我想实现基于代理的身份验证,我该怎么做?

我是否需要使用httpservlet的doGet()并尝试身份验证和显式转发到另一个地址,或者有一种方法使用jetty本身来设置基于代理的身份验证(或代理本地主机服务器),如上面的伪中所示?

我可以获得一些代码帮助来执行基于代理的身份验证,该身份验证可以验证HttpServlet请求并将其转发给另一个servlet /服务器吗?

1 个答案:

答案 0 :(得分:0)

对于current version of Jetty (9.3.3.v20150827)Proxy-Authenticate标头以任何方式与Servlet约束系统的WWW-Authenticate标头相关。

从Servlet规范或Jetty实现中没有内置任何东西来支持从Constraint角度来看Proxy-Authenticate客户端头。

但是,使用Jetty 9.3.x,您可以使用AsyncProxyServletAsyncProxyServlet.TransparentAsyncMiddleManServletAsyncMiddleManServlet.Transparent来处理此Proxy-Authenticate用你自己的方式标题。

要做到这一点,您首先要从其中一个扩展,然后覆盖sendProxyRequest(HttpServletRequest clientRequest, HttpServletResponse proxyResponse, Request proxyRequest)

在您的sendProxyRequest()版本中,查看clientRequestProxy-Authenticate的{​​{1}}标头,并执行最适合您需求的基于代理的身份验证。

如果身份验证通过,请致电Proxy-Authorize

否则,请使用super.sendProxyRequest(clientRequest, proxyResponse, proxyRequest);发送质询回复。