Tomcat:绕过指定 IP 地址的基本身份验证

2024-04-17

我已经配置 tomcat 进行基本身份验证。 我不希望任何人访问我的 Web 应用程序,但该应用程序正在提供 Web 服务。 所以我想从基本身份验证中绕过特定的IP地址。(该IP不应该需要身份验证。)

tomcat-users.xml:

<tomcat-users>
<user username="user" password="password" roles="user"/>
</tomcat-users>

网络.xml:

<security-constraint>
<web-resource-collection>
  <web-resource-name>Entire Application</web-resource-name>
  <url-pattern>/*</url-pattern>
</web-resource-collection>
<auth-constraint>
  <role-name>user</role-name>
</auth-constraint>
</security-constraint>


<login-config>
  <auth-method>BASIC</auth-method>
  <realm-name>You must enter your login credentials to continue</realm-name>
</login-config>

<security-role>
   <description>
      The role that is required to log in to the Application
   </description>
   <role-name>user</role-name>
</security-role>

谢谢, 切坦。


如果您只想允许几个 IP 地址并禁止其他所有人远程地址过滤阀 http://tomcat.apache.org/tomcat-7.0-doc/config/valve.html#Remote_Address_Filter就是你所需要的。

如果您希望来自未知 IP 地址的客户端看到基本登录对话框并可以登录,您需要自定义Valve http://tomcat.apache.org/tomcat-7.0-doc/config/valve.html。的来源RemoteAddrValve http://grepcode.com/file/repo1.maven.org/maven2/org.apache.geronimo.ext.tomcat/catalina/7.0.39.2/org/apache/catalina/valves/RemoteAddrValve.java/(它是父类RequestFilterValve http://grepcode.com/file/repo1.maven.org/maven2/org.apache.geronimo.ext.tomcat/catalina/7.0.39.2/org/apache/catalina/valves/RequestFilterValve.java#RequestFilterValve是一个很好的起点。看一看我以前的回答也是 https://stackoverflow.com/questions/7553967/getting-a-value-from-httpservletrequest-getremoteuser-in-tomcat-without-modifyi/7560802#7560802.

无论如何,下面是概念验证代码。它放置了一个充满Principal to the 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" />
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Tomcat:绕过指定 IP 地址的基本身份验证 的相关文章

  • 有完整的 tomcat 角色列表吗?

    我希望能够完全访问和控制 tomcat 以使我的开发生活变得简单 我知道角色 admin 和 manager 并且知道还有一些带有连字符的角色 例如 manager gui 但在哪里可以找到包含可用角色描述的完整列表 我什至无法在文档中找到
  • 部署程序集:当前显示的页面包含无效值

    我从 Sourceforge 导入了一个 Java Web 应用程序 我花了三个工作周的时间来消除项目名称和包上附加的所有红叉 但现在我无法使该应用程序在我的 Eclipse 和 tomcat6 开发环境上运行 在项目属性中 当我尝试设置部
  • 如何从 httpservletrequest 获取多方身份

    我正在尝试从 java spring 控制器调用 web 服务 下面是代码 private void storeImages MultipartHttpServletRequest multipartRequest DefaultHttpC
  • 如何在 Eclipse 中使用 Tomcat 8.5.x 和 TomEE 7.x?

    我需要设置一个 Tomcat8 5 xEclipse 中的服务器版本 当我尝试使用 Eclipse GUI 创建服务器时 我进入 Eclipse Luna 作为选择最新版本 阿帕奇汤姆猫 v8 0当我选择它并浏览到我的 Tomcat 8 5
  • 禁用特定的 ServletContextListener 以防止在 tomcat 上启动

    我的项目正在使用spring boot with webflux tomcat 我有一个内部库类 它是ServletContextListener WebListener public class DevIoServletContextLi
  • 从 Web 服务器异步调用应用程序

    我有一个用 Spring 制作的 在 Tomcat 上运行的 Web 应用程序 在同一台机器上有一个普通的 Java 应用程序 我想通过从Web服务器调用Java应用程序来执行它 但我想让应用程序不会使用服务器的资源 它涉及分类器的训练 因
  • Tomcat 8 中的多部分文件最大大小配置[重复]

    这个问题在这里已经有答案了 我的应用程序服务器是 Tomcat 我需要将文件 大尺寸 上传到我的应用程序 车身尺寸为POSTrequests 确实很长 大约 15 MB 或更多 我可以设置任何类型的配置或代码来解决这个问题吗 请记住 这是m
  • Ajax jquery 调用响应中出现 NetworkError: 403 Forbidden 错误

    我使用 apache tomcat 作为 Web 服务器 我已经在tomcat上部署了web服务 如果我通过 jquery ajax 从本地文件系统向 tomcat webservice 发布请求作为响应 我会收到 403 错误 如果我从同
  • 是否值得清理 Filter 中的 ThreadLocals 来解决线程池相关问题?

    简而言之 tomcat 使用线程池 因此线程被重用 一些图书馆使用ThreadLocal变量 但不要清理它们 使用 remove 所以实际上它们将 脏 线程返回到池中 Tomcat 具有在关闭时检测这些事情并清理线程局部变量的新功能 但这意
  • tomcat 7 + ssl 不工作 - ERR_SSL_VERSION_OR_CIPHER_MISMATCH

    Ubuntu 14 tomcat 7 java 7 our crt our key 和 gd bundle g2 g1 crt 由 godaddy 提供 该捆绑包中有 3 个证书 通过查看文件可以看出 请注意 我们的密钥和 crt 在 no
  • Tomcat 托管具有多个 SSL 证书的多个虚拟主机

    例如 我有一台使用 Tomcat 7 托管多个网站的服务器 a abc com b abc com c def com d def com 使用tomcat的虚拟主机功能 因此它们各自可能属于不同的webapps文件夹 我们现在正在尝试为每
  • 如何正确配置Tomcat SSLHostConfig?

    我正在按照本教程在 tomcat 中启用 ssl https medium com raupach how to install lets encrypt with tomcat 3db8a469e3d2 https medium com
  • 在tomcat中显示Spring-security的SQL错误

    我使用 spring security 框架创建了一个 Web 应用程序 我设置了一个数据库来存储用户及其角色 但 tomcat 给出以下错误 17 sep 2010 11 56 14 org springframework beans f
  • 是否可以使 Spring Security 会话失效?

    我正在使用 Tomcat 6 0 32 Spring Security 3 0 5 在我的网络应用程序中 某些用户可以更改其他用户的权限 发生这种情况时 我想使权限已更改的用户的任何会话无效 这可能吗 如果可能的话怎么办 通常 您无法在更改
  • Spring Boot 中 application.properties 可用的属性列表?

    Spring Boot文档说我们可以在application properties文件中设置属性 但我找不到列出可以设置的可用属性的文档 我在哪里可以找到这样的文档 例如 我想为嵌入式servlet设置documentRoot 我发现set
  • 由于 http 响应 405,无法执行 mvn tomcat:deploy

    我正在将 Tomcat 7 作为 Windows 服务运行 我想在我的项目根目录中进行 mvn tomcat 部署 但总是出现这个错误 你能帮我解决这个问题吗 INFO Deploying war to http localhost 808
  • Tomcat 服务器向 servlet 发出 3 个请求

    下面是我的doGet method WebServlet name IndexServlet urlPatterns home initParams WebInitParam name sortBy value Constants POPU
  • 通过 AJP 将 REMOTE_USER 转发到 tomcat(例如用于 shibboleth)

    今天我刚刚遇到了以下问题 1 我将apache配置为基本身份验证 需要有效用户 这有效 2 我进一步配置 apache 将某些路径 在我的例子中为 idp 的请求转发到 tomcat servlet shibboleth IDP 结果是 s
  • Tomcat 内存不足(无法创建新的本机线程)

    在给出错误 tomcat is exit shutdow 后 我的 1 个 tomcat 不断出现内存不足错误 其中部署了我的应用程序 我查看了日志文件并发现了这个 SEVERE Error allocating socket proces
  • 测量 tomcat 的排队请求数

    因此 使用tomcat 您可以设置acceptCount值 默认为100 这意味着当所有工作线程都忙时 新连接被放置在队列中 直到队列满 之后它们被拒绝 我想要的是监视此队列中项目的大小 但无法确定是否有办法通过 JMX 获取此值 即不是队

随机推荐

  • Firebase Auth:Android:无法显示用户电子邮件和照片

    我已在 Android 应用程序中添加 Firebase Auth 并且正在使用 Facebook 和 Google 登录 登录工作正常 现在 我想从用户的 Facebook 帐户或 Google 帐户 以用户选择登录的为准 检索用户个人资
  • 错误:BUG!源单元“_BuildScript_”中“类生成”阶段出现异常,目标模块不受支持

    我正在尝试创建一个新的Java 9项目使用gradle但在项目创建后 我收到了来自 gradle 的错误 Error BUG exception in phase class generation in source unit BuildS
  • 多个文件中的多次包含

    我正在制作一个小游戏 在BattleRecord h中 ifndef CHARACTER H define CHARACTER H include Character h endif class BattleRecord public Ch
  • 函数 session_start() 出现问题(运行缓​​慢)

    我有一个问题session start 在主服务器上 当我第一次加载页面时 完成请求只需要不到 1 秒的时间 如果我等待大约 12 15 秒 然后重新加载页面 加载时间将是相同的 但是 当我尝试在初始加载后 3 或 5 秒后刷新页面时 服务
  • Javascript对象:迭代属性[重复]

    这个问题在这里已经有答案了 我有一个变量 当打印到控制台时 它看起来像这样 Object PK 34 PK 35 我向该变量添加一个 size 方法 Model value size function obj var size 0 key
  • 在 Flask 中使用 SqlAlchemy 模型

    我使用 SqlAlchemy 创建了一些模型来最初设置数据库 最初 我解析一些 XML 文件并填充数据库 这是一次性的事情 当我在服务器上设置应用程序时需要完成 Base declarative base class Movie Base
  • 无法打开目标 = 空白的 Electron webview 链接

    我正在使用 Electron 我有一个显示外部网站的 webview 但我无法成功显示通常由该网站上的链接打开且目标 blank 的附加窗口 a href mentions html target blank Mentions l gale
  • java:在一个Web应用程序中使用同一库的两个版本

    我面临以下问题 我的 web 应用程序中有一个模块需要 jaxb 1 x 而另一个模块需要 jaxb 2 x 第一个模块不适用于新版本的 jaxb 反之亦然 如何在一个项目中使用这两个罐子 谢谢 对于常规应用程序 通常不同的版本使用不同的包
  • 设置 cassandra.logdir 的最佳方法是什么

    我已将 cassandra 软件放入 home user所有日志文件应放置在 data log Cassandra 具有文件conf logback xml 其中包含用于确定文件日志路径的参数 例如 cassandra logdir sys
  • 在 VS 2010 中禁用 WPF 设计器?

    有没有办法在 VS 2010 中禁用 WPF 设计器 预览窗格 我只需要带有智能感知的 XAML 窗格 请注意 当hidingWPF 设计器的设计视图 它仍然会呈现表单 控件 我不认为disabled 我只看到 打开方式 XML 编辑器 解
  • 使用 Actionscript 3 连接到数据库 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我正在寻找有关如何基于数据库在 Flash 中动态创建内容的建议 最初我想将数据库导出到 XML 文件并使用内置的 Actionscr
  • 如何在 Maven 3 站点插件中禁用测试 Javadoc 报告的生成?

    这是我的pom xml 我正在尝试禁用Test Javadoc报到site
  • 如何修复 VS Code 中的错误文件描述符错误?

    我有 vsc 版本 1 63 2 我收到以下通知 文件更改观察程序意外停止 重新加载窗口可能会再次启用观察程序 除非无法监视工作区的文件更改 在 窗口 日志 使用命令面板中的 开发人员 打开日志文件 命令打开 中 出现错误 renderer
  • 使用 R 中的传单库绘制跨越国际日期变更线的路线

    我有兴趣使用 R 的传单库绘制从滑铁卢到台湾的路线 路线的坐标是使用 geosphere 中的 gcIntermediate 函数获得的 然而 该路线涉及穿越国际日期变更线 因此该路线在地图边缘被切断 并在顶部与直线连接 我得到的情节 错误
  • JUnit 5 何时提供场景测试?

    在一次会议 JavaForum Stuttgart 2016 上 他们表示 JUnit 5 将包含一个支持场景测试的功能 http 2016 java forum stuttgart de de Abstracts Slot 1 html
  • Keras LSTM 输入形状的输入形状错误

    在 Keras 中使用时间序列时出现此错误 ValueError Error when checking input expected lstm 1 input to have 3 dimensions but got array with
  • Swift 中基于内容的动态 UITextView 大小

    我不认为有人可以指导我在仍然使用自动布局的同时动态调整 UITextView 大小的正确方法 使用 Swift 就是这样 我尝试以编程方式调整底部约束 试图让 UITextView 拥抱内容 但我不知道如何获取 UITextView 内容的
  • TinyMCE 在 DOM 中渲染后执行操作

    我正在使用 TinyMCE 4 并按如下方式设置 tinyMCE init mode specific textareas editor selector basicTinyMCE theme modern readonly false 我
  • 长度为 5 的回文数

    给定一个二进制字符串 S 找到长度为 5 的回文子序列的数量 长度为 5 的回文子序列是数组 a 我的想法 我想出了如下的递归 palin s palin s 1 palin s 1 palin s 1 1 当 s 0 s 1 时 就是上面
  • Tomcat:绕过指定 IP 地址的基本身份验证

    我已经配置 tomcat 进行基本身份验证 我不希望任何人访问我的 Web 应用程序 但该应用程序正在提供 Web 服务 所以我想从基本身份验证中绕过特定的IP地址 该IP不应该需要身份验证 tomcat users xml