如何使用自定义 JAAS 堆栈配置 Spring Security?
Posted
技术标签:
【中文标题】如何使用自定义 JAAS 堆栈配置 Spring Security?【英文标题】:How to configure spring security with custom JAAS stack? 【发布时间】:2012-03-30 23:48:39 【问题描述】:我已关注this tutorial,以便为我的 spring mvcbasedweb 应用程序添加基本的 spring 安全性。
在添加 spring 安全层之前,我的应用程序使用在我的 web.xml 中配置的自定义 SSO 登录模块进行了保护:
<login-config>
<auth-method>MyLoginModule</auth-method>
</login-config>
此登录模块负责重定向到登录表单、执行登录等,并且按预期工作。 添加基本的 spring 安全层后,应用程序将重定向到我的自定义登录页面,当我进行身份验证时,使用 spring 的标准“使用用户名和密码登录”表单通过另一个身份验证。
我的问题是如何将 spring 配置为仅使用我上面的 login-config 来执行身份验证并删除它自己多余的“内置”表单?
【问题讨论】:
您是否阅读了参考手册中有关 JAAS 的信息,查看了 JAAS 示例等?此外,在您的问题标题中提及 JAAS 可能也很有意义,因为“登录模块”一词本身就很模糊,很多人不会意识到您指的是特定技术。 感谢您对问题标记的评论。不确定我是否理解你的问题。我的 JAAS 堆栈自己运行良好,我的 spring 安全设置自己运行良好,我似乎无法让 spring security 触发 MyLoginModule 来执行身份验证。 【参考方案1】:我在 Spring Security 参考中找到了我正在寻找的内容。具体来说,关于Java Authentication and Authorization Service (JAAS) Provider的章节。
【讨论】:
此 url 将始终指向 Spring Security 的当前版本:docs.spring.io/spring-security/site/docs/current/reference/html/…【参考方案2】:抱歉,我之前没有理解您的情况。检查this 以执行您的身份验证。您应该将用户注册到 SecurityContextHolder。
也请访问oficial spring 3.1 security reference。
下面的例子是典型的表单web认证(一定要用spring j_username/password来识别):
<form id="loginForm" name="loginForm"
action="<c:url value='my_security_check'/>" method="POST">
...
<label for="user">The username</label><input type="text" name="j_username"/>
<label for="password">The password</label><input type='password'
name='j_password'/>
...
<input name="submitButton" type="submit" value="submit"/>
...
你必须在你的 spring 安全文件中定义这个安全检查:
<security:form-login login-page="/login"
default-target-url="/welcome"
login-processing-url="/my_security_check" />
<security:logout logout-url="/my_security_logout"
logout-success-url="/login" />
</security:http>
在我使用 Tiles 的情况下,我还必须将其添加到我的 mvc 配置文件中:
<mvc:view-controller path="/login" view-name="login" />
示例和源代码:mkyong.com/spring-security/spring-security-form-login-example/
【讨论】:
但这是为了告诉它我的登录页面在哪里,我希望它使用我的 LoginModule 进而将用户重定向到登录页面 只需在 Spring Security 中将您的 default-target-url 定义为您想要的页面。我编辑答案更简洁。 再次,我没有可以设置的登录页面,在我的 jass 堆栈中配置了一个登录模块来处理它,我希望 spring security 调用/使用它来执行登录 如果不使用spring登录,尝试获取autenticated用户,或者用spring设置。 SecurityContextHolder.getContext().getAuthentication();以上是关于如何使用自定义 JAAS 堆栈配置 Spring Security?的主要内容,如果未能解决你的问题,请参考以下文章
绕过对用户名/密码的 JConsole 要求 - 当使用带有 JMX 的 Jaas 自定义登录模块来处理授权和身份验证时
在 Spring Boot 应用程序中防止自定义异常的堆栈跟踪日志记录