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

Posted

技术标签:

【中文标题】容器管理的安全性、Spring 安全性和身份验证【英文标题】:Container Managed Security, Spring Security and Authentication 【发布时间】:2016-08-15 03:33:19 【问题描述】:

我一直在寻找如何基于容器管理的安全模型实现 Spring Security。在我的测试用例中,我使用的是 Tomcat,它是对应的 tomcat-users.xml 文件。问题是,我无法让 Spring Security 正常运行(意味着将身份验证传递给 Tomcat)以让应用服务器执行身份验证并让 Spring 在某人通过身份验证后管理基于角色的安全性。我使用的是最新的 Spring 版本,所以都是 Java 配置,因为我对基于 XML 的配置不够熟悉。我已经阅读了许多关于使用 PreAuthenticatedAuthenticationProvider 的示例,但是这些示例很差,更不用说 Spring 文档在恕我直言时非常令人困惑。我什至从 Spring Security GIT hub 下载了示例 preauth 代码,但我仍然看不到示例代码如何与 Tomcat 正在执行的身份验证相关联。当我为 preauth 运行 Spring 示例代码时,当我将代码部署到 Tomcat 8 时,它不会对我的 tomcat-users XML 文件中的任何用户进行身份验证。想知道是否有人对我可以查看的位置有任何想法了解 Spring Security 和 Tomcat(容器管理)执行的身份验证是如何发生的?

更新: 看来我必须从头开始,只需使用在我的 IDE 中创建的非常简单的应用程序进行身份验证即可。基本上我有一个称为安全的文件夹,一个称为不安全的文件夹,我根据 Servlet 3 规范映射路径以保护和不保护我需要的东西。我必须使用 web.xml 来包含安全约束。一旦我在 Tomcat 7 和 8 中进行了测试,我试图点击一个安全的 URL,我被要求输入一个 ID 和密码。请注意,您必须定义登录页面的路径,我的是一个简单的 JSP。我还必须提交给 j_security_check 并确保使用 j_username 和 j_password 字段名称。一旦我知道我可以访问安全页面,我就开始介绍 Spring 组件。这涉及到 Spring Security、Spring Boot 等。关键在于 WebSecurityConfigurerAdapter。在我通常启用基本身份验证或基于表单的安全性的情况下,我删除了这些,而是​​使用了 jee() 设置,该设置基于用于配置安全设置的相同 fluent builder API。我在 web.xml 中保留了所有 antmatcher 设置,所以我的 WebSecurityConfigurerAdapter 非常基础。在调试控制器时,可以直接在方法中注入 HttpServletRequest,该请求包含一个 userPrincipal 请求值,其中包含用户 ID 和角色等内容。祝你好运,希望这对其他人有所帮助,因为我很难找到这样一个简单的解决方案。

【问题讨论】:

伙计,非常感谢你。这两天我一直在头撞墙,试图让 Spring Security 在容器身份验证方面发挥出色,而我所需要的只是调用 .jee() 方法! 【参考方案1】:

有关我的解决方案的详细说明,请参阅更新。

【讨论】:

以上是关于容器管理的安全性、Spring 安全性和身份验证的主要内容,如果未能解决你的问题,请参考以下文章

是否可以将容器管理的身份验证与密码加盐一起使用?

Spring安全性重定向到经过身份验证的URL的登录页面

Karaf 容器、Rest WS 和 Spring 安全性

Spring 安全重定向到登录页面以获取经过身份验证的 url

Spring 安全 ldap 连接管理

Oauth 和 Spring 安全性