我目前已配置 Spring Security 并且工作正常。我想让 CAS 正常工作,这样我就可以在我编写的多个应用程序中进行单点登录。我很困惑如何让 cas 使用我的自定义 userdetailService。
目前我有这是我的 spring-security.xml
<authentication-manager alias="authManager">
<authentication-provider user-service-ref="userDetailsService">
<password-encoder ref="passwordEncoder">
<salt-source ref="saltSource"/>
</password-encoder>
</authentication-provider>
</authetication-manager>
从所有 cas 示例中,我发现他们说要以这种方式实现管理:
<beans:bean id="casAuthenticationProvider" class="org.springframework.security.cas.authentication.CasAuthenticationProvider">
<beans:property name="authenticationUserDetailsService">
<beans:bean class="org.springframework.security.core.userdetails.UserDetailsByNameServiceWrapper">
<beans:constructor-arg ref="userDetailsService"/>
</beans:bean>
</beans:property>
<beans:property name="serviceProperties" ref="serviceProperties"/>
<beans:property name="ticketValidator">
<beans:bean class="org.jasig.cas.client.validation.Cas20ServiceTicketValidator">
<beans:constructor-arg index="0" value="https://localhost:8443/cas"/>
</beans:bean>
</beans:property>
<beans:property name="key" value="1234554321"/>
</beans:bean>
<authentication-manager alias="authManager">
<authentication-provider ref="casAuthenticationProvider"/>
</authentication-manager>
文档令人困惑。如何从一个工作的 spring-security 应用程序转变为一个实现 cas 并仍然使用我的自定义用户详细信息的应用程序?另外我需要在jsp页面上更改什么?任何帮助将不胜感激。
谢谢
最佳答案
我认为您希望 CAS 使用您自己的密码+盐编码器来验证密码。
不幸的是,这不是一个直接的配置,并且该配置不在您的 Spring 应用程序中。 您需要重新编译 CAS 以包含您的自定义密码+盐编码器。 这样,当Spring调用CAS进行身份验证时,将使用相同的自定义密码+盐编码器。
幸运的是,CAS 团队创建了 WAR Overlay 方法,以便用户可以轻松地重新编译 CAS 服务器以包含自定义密码+盐编码器
你需要非常耐心地按照步骤操作,并确保你的系统有Maven2 您无需下载任何库,因为 Maven 会处理这些事情。 WAR Overlay 方法的基本思想是创建一个 Maven 控制的文件夹,您可以在其中创建子文件夹来添加自定义 java 库。
Maven 将用于重新编译自定义 Java 代码以及 CAS 文件以生成 WAR 文件,您可以在其中将其发布到 SSL 服务器。
只需确保 CAS 和您的 Spring 应用程序都使用 SSL。
祝你好运!
关于java - 使用 Spring Security 3 实现 CAS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13147249/