我们目前有一个带有 Spring Security 的应用程序和一个登录页面。我们现在可以从 session 中检索用户信息,因此我们希望摆脱登录页面以允许用户自动登录。我已经在这方面投入了一两周的时间,但不知道如何在考虑到 Spring 最佳实践的情况下解决这个问题。此外,一旦用户通过身份验证,他们将根据其角色重定向到适当的页面。
我应该使用过滤器、自定义身份验证提供程序、自定义身份验证管理器和/或自定义身份验证入口点吗?
因此,我们将 kerberos 与 Active Directory 一起使用,我们可以像这样检索用户信息:
subject = Security.getCurrentSubject();
if ((subject != null) && (!SubjectUtils.isUserAnonymous(subject))) {
Set principalSet = subject.getPrincipals();
Principal[] principals = (Principal[]) principalSet.toArray(new Principal[0]);
if ((principals != null) && (principals.length > 0)) {
UserContext.get().pushSubject(subject);
}
}
这是当前的 spring-security.xml 文件。
<http auto-config="true" use-expressions="true">
<intercept-url pattern="/includes/**" access="permitAll"/>
<intercept-url pattern="/index**" access="permitAll"/>
<intercept-url pattern="/error**" access="permitAll"/>
<intercept-url pattern="/searchDist/fetchDocument**"
access="hasAnyRole('EED_SOC','EEConsumers','EEDocumentControllers')"/>
<intercept-url pattern="/searchGT/fetchDocument**"
access="hasAnyRole('EEG_SOC','EET_SOC','EEDocumentControllers')"/>
<intercept-url pattern="/searchDist**" access="hasAnyRole('EED_SOC','EEConsumers','EEDocumentControllers')"/>
<intercept-url pattern="/searchGT**" access="hasAnyRole('EEG_SOC','EET_SOC','EEDocumentControllers')"/>
<access-denied-handler error-page="/error"/>
<form-login
login-page="/index.html"
default-target-url="/index.html"
username-parameter="username"
password-parameter="password"
authentication-failure-url="/index.html"
always-use-default-target="false"
authentication-success-handler-ref="customAuthenticationHandler"/>
<logout invalidate-session="true" logout-success-url="/index.html"/>
</http>
<authentication-manager>
<authentication-provider ref="customAuthenticationProvider"/>
</authentication-manager>
最佳答案
我相信我已经快到达我想去的地方了。我设法通过以下方式找到了大部分答案:http://javadiscover.blogspot.ca/2015/05/spring-security-pre-authentication.html
关于java - 如何使用 Java Spring 实现自动登录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44595885/