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 如何将<http-basic />
添加到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 容器身份验证