我有一个tomcat 7设置,其上部署了oldApp.war和newApp.war。两个应用程序共享数据库上用户的相同登录凭据。
我可以分别使用https://localhost/oldApp
和https:localhost/newApp
访问应用程序。
我的oldApp是一个Spring MVC java应用程序,当用户登录到oldApp时,我希望有一个链接,将用户带入newApp而不需要登录凭据。
我想知道如何实现SSO来做到这一点。我最好不要运行任何外部服务来处理这个问题。
提前致谢。
您可以通过多种方式实施SSO:
SAML 2.0具有许多身份/服务提供者角色的实现。
对于IDP实现列表,我可以指向您的stackoverflow帖子:https://stackoverflow.com/a/761774/126414
如果您计划实施服务提供商,那么有一个很好的春季扩展:http://static.springsource.org/spring-security/site/extensions/saml/index.html
更新:2018年及以下信息已过期。如果您正在启动一个新应用程序,那么使用联合身份协议(如Open ID Connect),您将免费获得SSO。
您可以采取以下几种方法:
您可以在tomcat中部署CAS服务器(这只是一场战争)并相应地配置您的Web应用程序的过滤器。你可以从这个link获得帮助。
我用Tomcat的SSO Valve管理了这个:
server.xml
文件的Host(localhost)元素中:
<Host appBase="webapps" autoDeploy="true" name="localhost" unpackWARs="true">
<Valve className="org.apache.catalina.authenticator.SingleSignOn" />
</Host>
tomcat_users.xml
中):
<user username="user1" password="user1" roles="employee"/>
web-app
文件的web.xml
元素中,添加安全性约束:
<security-constraint>
<web-resource-collection>
<web-resource-name>App name</web-resource-name>
<url-pattern>/*</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>employee</role-name>
</auth-constraint>
</security-constraint>
<login-config>
<auth-method>FORM</auth-method>
<realm-name>file</realm-name>
<form-login-config>
<form-login-page>/login.jsp</form-login-page>
<form-error-page>/error.jsp</form-error-page>
</form-login-config>
</login-config>
<security-role>
<role-name>employee</role-name>
</security-role>
当然,您不应该在制作中使用纯文本密码,这只是一个简单的例子。你应该考虑Digest authentication,以及configuring SSL on Tomcat。
我希望这会对某人有所帮助!
附:如果您将用户存储在SQL数据库中,请在此答案下方查看我的评论。