Если вы хотите разрешить только несколько IP-адресов и запретить всем остальным, Фильтр для удаленного адреса - это то, что вам нужно.
Если вы хотите, чтобы клиенты с неизвестных IP-адресов видели основное диалоговое окно входа и могли войти в систему, вам нужен пользовательский Valve
. Источник RemoteAddrValve
(и его родительский класс RequestFilterValve
является хорошей отправной точкой. Взгляните мой прежний ответ тоже .
Во всяком случае, ниже приведено доказательство кода концепции. Он заполняет Principal
на Request
, если клиент приходит с доверенного IP-адреса, поэтому модуль входа не будет запрашивать пароль. В противном случае он не касается объекта Request
, и пользователь может войти в систему как обычно.
import java.io.IOException;
import java.security.Principal;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.ServletException;
import org.apache.catalina.connector.Request;
import org.apache.catalina.connector.Response;
import org.apache.catalina.realm.GenericPrincipal;
import org.apache.catalina.valves.ValveBase;
public class AutoLoginValve extends ValveBase {
private String trustedIpAddress;
public AutoLoginValve() {
}
@Override
public void invoke(final Request request, final Response response)
throws IOException, ServletException {
final String remoteAddr = request.getRemoteAddr();
final boolean isTrustedIp = remoteAddr.equals(trustedIpAddress);
System.out.println("remoteAddr: " + remoteAddr + ", trusted ip: "
+ trustedIpAddress + ", isTrustedIp: " + isTrustedIp);
if (isTrustedIp) {
final String username = "myTrusedUser";
final String credentials = "credentials";
final List<String> roles = new ArrayList<String>();
roles.add("user");
roles.add("admin");
final Principal principal = new GenericPrincipal(username,
credentials, roles);
request.setUserPrincipal(principal);
}
getNext().invoke(request, response);
}
public void setTrustedIpAddress(final String trustedIpAddress) {
System.out.println("setTrusedIpAddress " + trustedIpAddress);
this.trustedIpAddress = trustedIpAddress;
}
}
И пример конфигурации для server.xml
:
<Valve className="autologinvalve.AutoLoginValve"
trustedIpAddress="127.0.0.1" />