我有一个tomcat 7设置,其上部署了oldApp.war和newApp.war。两个应用程序共享数据库上用户的相同登录凭据。
我可以分别使用https://localhost/oldApp
和https:localhost/newApp
来访问这些应用。
我的oldApp是一个Spring MVC java应用程序,当用户登录到oldApp时,我希望有一个链接,将用户带入newApp而不需要登录凭据。
我想知道如何实现SSO来执行此操作。我最好不要运行任何外部服务来处理这个问题。
提前致谢。
答案 0 :(得分:11)
更新:2018年及以下信息已过期。如果您正在启动一个新应用程序,那么使用联合身份协议(如Open ID Connect),您将免费获得SSO。
您可以采取以下几种方法:
答案 1 :(得分:7)
您可以通过多种不同方式实施SSO:
SAML 2.0有很多身份/服务提供者角色的实现。
对于IDP实现列表,我可以指向您的stackoverflow帖子: https://stackoverflow.com/a/761774/126414
如果您计划实施服务提供商,那么有一个很好的春季扩展: http://static.springsource.org/spring-security/site/extensions/saml/index.html
答案 2 :(得分:3)
您可以在tomcat中部署CAS服务器(这只是一场战争)并相应地配置您的Web应用程序的过滤器。您可以从link获得帮助。
答案 3 :(得分:3)
我使用Tomcat的 SSO Valve :
进行了管理将SSO Valve放在server.xml
文件的主机(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。
我希望这会对某人有所帮助!
P.S。如果您将用户存储在 SQL数据库中,请在此答案下方查看我的评论。