出于安全考慮,我正試圖從現有的安裝中移除 AJP 的使用,但找不到任何關于如何移除的資訊。
具體而言,我的原始 Apache 配置中有 JKMount 指令,我已經用 ProxyPass 和 ProxyPassReverse 指令替換了這些指令,但是原始的 Kerberos 認證似乎沒有再被傳遞到 Tomcat。
(我現在啟用了mod_proxy_http和mod_proxy。)
在這種情況下,谷歌絕對不是我的朋友。
uj5u.com熱心網友回復:
其實并沒有一個標準的方法來將認證的用戶名從Apache轉發到Tomcat,使用mod_proxy_http,但是你可以輕松地創建一個:
- 配置Apache 2以發送
X-Forwarded-User頭(如果我們有一個認證的用戶):
RequestHeader unset X-Forwarded-User
RequestHeader設定X-Forwarded-User "expr=%{REMOTE_USER}" "expr=-%{REMOTE_USER}"
- 在Tomcat一側編譯(并放在
$CATALINA_BASE/lib中)一個Valve,它將從"受信任的"主機中檢索X-Forwarded-User:
import java.io.IOException;
import java.util.regex.Pattern。
import javax.servlet.ServletException;
import org.apache.catalina.connector.CoyotePrincipal;
import org.apache.catalina.connector.Request。
import org.apache.catalina.connector.Response。
import org.apache.catalina.valve.ValveBase;
public class RemoteUserValve extends ValveBase {
private static String remoteUserHeader = "X-Forwarded-User"。
//與RemoteIpValve中相同。
private static Pattern internalProxies = Pattern
.compile("10.d{1,3}.d{1,3}.d{1,3}|" "192.168.d{1,3}.d{1,3}|"
"169.254.d{1,3}.d{1,3}|"/span> "127.d{1,3}.d{1,3}|"/span>
"172.1[6-9]{1}.d{1,3}.d{1,3}|" "172.2[0-9]{1}.d{1,3}|"
"172.3[0-1]{1}.d{1,3}.d{1,3}|" "0:0:0:0:0:1|:1")。)
@Override
public void invoke(Request request, Response response) throwsIOException, ServletException {
if (internalProxies.matcher(request.getRemoteAddr()).matches() ) {
final String user = request.getHeader(remoteUserHeader)。
if (user != null && !user.isEmpty() ) {
request.setUserPrincipal(new CoyotePrincipal(user))。
}
}
getNext().invoke(request, response)。
}
}
- 將閥門添加到
servers.xml。
<Engine name="Catalina">
<Valve className="fully.qualified.name.RemoteUserValve"/span> />
...
</Engine>
我不認為這非常安全,但它提供了與同等的AJP功能相同的安全水平。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/319431.html
標籤:
上一篇:如何在影片中改變Y的位置
