我一直在寻找如何基于容器管理安全模型实现Spring Security的方法。在我的测试用例中,我使用的是Tomcat和相应的tomcat-users.xml文件。问题是,我无法让Spring Security发挥得很好(意味着将身份验证传递给Tomcat)让app服务器执行身份验证,并让Spring在管理身份验证后管理基于角色的安全性。我使用的是最新的Spring版本,所以它都是Java配置,因为我对基于XML的配置不够熟悉。我已经阅读了很多关于使用PreAuthenticatedAuthenticationProvider的例子但是示例很差,更不用说Spring文档很混乱恕我直言。我甚至从Spring Security GIT中心下载了示例preauth代码,但我仍然看不到示例代码如何与Tomcat执行的身份验证相关联。当我为preauth运行Spring示例代码时,它不会对我的tomcat-users XML文件中的任何用户进行身份验证,因为我将代码部署到Tomcat 8.想知道是否有人对我可以查看的内容有任何想法,以便了解如何通过Tomcat(容器管理)执行Spring Security和身份验证?
更新 看来我必须从头开始,只需使用我在IDE中创建的非常简单的应用程序进行身份验证即可。基本上我有一个名为secure的文件夹,一个名为unsecure的文件夹,我根据Servlet 3规范映射路径以保护和解除我所需的安全。我必须使用web.xml才能包含安全性约束。一旦我在Tomcat 7和8中进行了测试,我尝试访问安全URL,我就被要求输入ID和密码。请注意,您必须定义登录页面的路径,我的是一个简单的JSP。我还必须提交到j_security_check,并确保使用j_username和j_password字段名称。一旦我知道我可以访问安全页面,我就开始介绍Spring组件。这涉及Spring Security,Spring Boot等。关键在于WebSecurityConfigurerAdapter。我通常会启用基本身份验证或基于表单的安全性,我删除了这些,而是使用基于用于配置安全设置的相同流畅构建器API的jee()设置。我在web.xml中保留了所有antmatcher设置,因此我的WebSecurityConfigurerAdapter非常基本。在调试控制器时,可以直接在方法中注入HttpServletRequest,该请求包含userPrincipal请求值,其中包含用户ID和角色等内容。祝你好运,希望这有助于其他人,因为我很难找到这样一个简单的解决方案。
答案 0 :(得分:1)
有关我的解决方案的详细说明,请参阅更新。