tomcat - 是否可以在 Tomcat 中组合 RemoteAddrValve 和身份验证阀?

标签 tomcat tomcat7

我想用 Apache Tomcat 实现基于容器的访问控制。我想通过 IP 地址使用内置验证器阀之一(例如 FORM、BASIC 等)授予对我的 Web 服务的访问权限。

使用场景是允许某些用户从一些静态服务器 IP 地址访问,如果他们不在那些受信任的 IP 范围内,则提供一些身份验证凭据(最好通过 TLS)。

是否有可能以这种方式组合两个阀门的 Action ?如果不是,什么是好的/快速/简单的方法来解决这个问题?

最佳答案

不,Tomcat 不支持开箱即用。您必须编写自己的 Authenticator 才能执行此类操作。

例如,由于您要结合现有的 Authenticator(假设 FormAuthenticator 用于通过 HTML 表单向用户询问用户名和密码),但也允许绕过来自 IP 范围的用户,然后简单地:

  1. 子类化 FormAuthenticator
  2. 重写 authenticate(Request,HttpServletResponse) 方法以
    1. 检查 IP 请求的地址;如果匹配,则在请求上设置 Principal返回 true
    2. 如果没有 IP 匹配,调用 super.authenticate(request,response)

好好看看 FormAuthenticator.authenticate 是如何做的,您将能够轻松地处理如上所述的 Principal

请记住,如果您只有一个 IP 地址,您将不知道选择哪个用户或角色。因此,您可能需要在适合该用户的任何角色集合中使用类似“IPauthUser”的内容。

关于tomcat - 是否可以在 Tomcat 中组合 RemoteAddrValve 和身份验证阀?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35431821/

相关文章:

apache - 如何在 Apache HTTP 服务器上安装 Tomcat

macos - mac 安全命令在守护进程运行时需要写权限?

tomcat - 确定创建 tomcat keystore 时使用的别名

java - 通过导航到 bin 目录解决从命令行启动 Apache Tomcat 的麻烦

java - Tomcat 7 上的 Spring Stack Web 应用程序未停止(需要强制终止)

java - 重负载下 Web 应用程序中的 NoClassDefFoundError

java - runtime.getruntime().exec ("wscript.exe macro.vbs") 在 Windows Server 2008 上不起作用

windows - 可移植 JDK、Tomcat 和 Eclipse (Windows)

java - Tomcat 中的 SSL 支持 : Redirect Issue

java - 如何在 Tomcat 7 中设置带有 MySql 连接池的 Realm ?