如何使用Spring Security将用户重定向回我的SSO服务?

时间:2012-12-18 13:52:21

标签: spring-security single-sign-on

我的应用程序旨在使用SSO服务进行身份验证。该场景类似于Spring文档中的Siteminder场景。用户来自已经过身份验证的SSO。

但是,如果用户访问该应用程序但尚未通过身份验证,我想将用户重定向到SSO登录表单。

我该如何做到这一点?

2 个答案:

答案 0 :(得分:0)

class Http403Redirect extends Http403ForbiddenEntryPoint {

    Logger log = LoggerFactory.getLogger(Http403Redirect.class)

    @Override
    public void commence(HttpServletRequest arg0, HttpServletResponse arg1, AuthenticationException arg2) 
        throws IOException ,ServletException {
        arg1.setStatus(403)
        arg1.sendRedirect("http://www.google.com/")
    }
}

在我的servlet安全xml配置中:

<beans:bean id="http403EntryPoint" class="com.opentext.infofusion.security.otds.Http403Redirect" />

<http use-expressions="true" auto-config="false" entry-point-ref="http403EntryPoint">
    <intercept-url pattern="/**" access="hasRole('user')" />
    <custom-filter ref="otdsFilter" position="PRE_AUTH_FILTER"/>
</http>

这似乎可以解决问题。

答案 1 :(得分:0)

使用自定义过滤器也是我过去完成此操作的方式。要添加的一件事是,如果用户未经过身份验证,则表单登录可以重定向到您的页面。

<http use-expressions="true">
    <intercept-url pattern="/**" access="isFullyAuthenticated()"/>
    <form-login login-page="${ssoPage}" authentication-failure-url="${ssoPage}"/>
    <custom-filter ref="jeePreAuthenticatedFilter"  position="PRE_AUTH_FILTER"/>
    <logout invalidate-session="true" logout-success-url="/logout.jsp" delete-cookies="MYSubject"/>
</http>

<!-- J2EE pre-authentication -->
<beans:bean id="jeePreAuthenticatedFilter" class="com.example.MyCustomFilter">
    <beans:property name="authenticationManager" ref="authenticationManager" />
</beans:bean>

<beans:bean id="authenticationProvider" class="org.springframework.security.web.authentication.preauth.PreAuthenticatedAuthenticationProvider">
    <beans:property name="preAuthenticatedUserDetailsService"  ref="preAuthenticatedUserDetailsService"/>
</beans:bean>
<beans:bean id="preAuthenticatedUserDetailsService" class="com.example.MyCustomUserDetailsService">

</beans:bean>
<authentication-manager alias="authenticationManager">
    <authentication-provider ref="authenticationProvider" />
</authentication-manager>