Tomcat 身份验证和 Spring Security

Posted

技术标签:

【中文标题】Tomcat 身份验证和 Spring Security【英文标题】:Tomcat Authentication and Spring Security 【发布时间】:2014-04-07 13:38:46 【问题描述】:

我下载了 JavaMelody(服务器统计信息)并将其应用到我的 Spring 项目中。一切都很好用这个 - 插入 http://myAplication/monitoring 后,我可以看到 JavaMelody 页面。我决定,这应该受密码保护。所以我按照文档添加了tomcat-users.xml

<?xml version='1.0' encoding='utf-8'?>
<tomcat-users>
    <role rolename="monitoring" />
    <user username="monitoring" password="monitoring" roles="monitoring" />
</tomcat-users>

然后我在web.xml中插入了几行

<filter>
    <filter-name>monitoring</filter-name>
    <filter-class>net.bull.javamelody.MonitoringFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>monitoring</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>
<listener>
    <listener-class>net.bull.javamelody.SessionListener</listener-class>
</listener>

<!-- JAVA MELODY MONITOR ACCESS -->
<login-config>
    <auth-method>BASIC</auth-method>
    <realm-name>Monitoring</realm-name>
</login-config>
<security-role>
    <role-name>monitoring</role-name>
</security-role>
<security-constraint>
    <web-resource-collection>
        <web-resource-name>Monitoring</web-resource-name>
        <url-pattern>/monitoring</url-pattern>
    </web-resource-collection>
    <auth-constraint>
        <role-name>monitoring</role-name>
    </auth-constraint>
</security-constraint>

现在,当我输入 http://myAplication/monitoring 时,我会弹出身份验证 - 这很酷。但是当我输入凭据并单击确定时,会显示另一个身份验证弹出窗口。不同的是,这个来自 Spring Security(我在我的应用程序的任何地方都没有看到那个弹出窗口)。

现在,我输入 Spring Security 的凭据(其他凭据),JavaMelody 页面开始显示,但另一个 monitoring 弹出窗口显示,然后是 spring security,然后再次显示,然后再次... - 直到所有页面元素都加载完毕。

我的 Spring Security 配置

<http auto-config='true' use-expressions="true">
    <intercept-url pattern="/**" access="permitAll" />
    <form-login login-page='/' default-target-url='/login_ok'
        always-use-default-target='true' authentication-failure-url="/login_failed" />
    <logout logout-success-url="/" />
</http>

有没有办法让 Spring Security 和 Tomcat Authentication 一起工作?

【问题讨论】:

【参考方案1】:

你必须决定你想要什么:Container Manager Security (web.xml) 或 Spring Security (beans.xml)。你不应该同时使用两者。这就是您看到两个基本领域名称的原因。

【讨论】:

我明白了。谢谢你的信息,我必须处理这个:) @Michael-O 如何将&lt;http-basic /&gt; 添加到spring security config 以在普通表单登录之前使用基本身份验证? 您可以提供和优先/顺序属性。定义明确,可以在官方Spring docs查到。【参考方案2】:

在 Spring Security 2.x 中曾经有 Container Adapter Authentication -- 它是一个“使 Catalina (Tomcat) 能够通过 Spring Security 进行身份验证的适配器”。

不确定 Spring Security 3.x 或 4.x 中是否存在此功能

【讨论】:

以上是关于Tomcat 身份验证和 Spring Security的主要内容,如果未能解决你的问题,请参考以下文章

通过 Tomcat 的 Spring Boot LDAP 身份验证(预身份验证)

让 Grails、Spring Security Core Plugin 和 Tomcat 使用 X.509 证书身份验证

使用独立 Tomcat 的 Spring Boot 容器身份验证

容器管理的安全性、Spring 安全性和身份验证

使用基本身份验证配置 Spring Boot 的嵌入式 tomcat 容器

带有嵌入式tomcat的Spring Boot +带有身份验证用户的访问日志