我们目前有一个Spring Security和登录页面的应用程序。我们现在能够从会话中检索用户信息,因此我们希望摆脱登录页面以允许用户自动登录。我一直在旋转我的轮子一两个星期,并且不知道如何以最好的Spring实践来解决这个问题。此外,一旦用户通过身份验证,他们将根据其角色重定向到相应的页面。
我应该使用过滤器,自定义身份验证提供程序,自定义身份验证管理器和/或自定义身份验证入口点吗?
因此我们在Active Directory中使用kerberos,我们可以检索这样的用户信息:
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>
答案 0 :(得分:1)
我相信我几乎就要去了。我设法找到了大部分答案:http://javadiscover.blogspot.ca/2015/05/spring-security-pre-authentication.html