一、理解单点登录的概念
在多应用系统或分布式系统中,用户只需要登录一次,然后访问其他系统,就不需要再次登录,自动登录。
二、单点登录的实施原则
要实现单点登录,主要有两个问题需要解决:1 .会话共享和2.ajax跨域问题。用户身份信息可以存储在第三方单点登录认证服务器中,这可以通过使用cas单点登录框架来实现。cas共享用户身份信息,cookie存储用户身份信息的唯一标识符(因此浏览器无法禁用cookie实现单点登录)。CAS的协议流程如下:
第三,使用cas实现单点登录。
1.下载cas server cas-server-web app-4 . 0 . 0 . war,将其名称更改为cas.war,并将其部署在tomcat目录中的webapps下。在浏览器中输入3358 localhost :8080/cas/log in查看登录页面:
2.cas客户端构建,您可以构建两个或多个客户端项目进行测试。建筑请参考以下内容。
(1)构建maven项目并引入与cas相关的依赖关系。
属国
属国
groupIdorg.jasig.cas.client/groupId
artifactIdcas-客户端-coreartifactId
3 . 3 . 3版
/依赖性
属国
groupIdjavax.servlet/groupId
artifactIdservlet-API/artifactId
2.5版/版本
scope provided/示波器
/依赖性
/依赖项
(2)添加网页
?xml版本='1.0 '编码='UTF-8 '?
web-app xmlns : xsi=' http://www . w3 . org/2001/XMLSchema-instance '
xmlns=' http://Java . sun.com/XML/ns/javaee '
xsi : schema location=' http://Java . sun.com/XML/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd'
版本='2.5 '
!-用于单点登录,该过滤器用于实现单点登录功能,可选配置-
听众
监听器类
org . jasig . cas . client . session . singletsignathtpsessionlistener/listener-class
/listener
!-该过滤器用于实现单点登录功能,可任意配置。-
过滤器
过滤器名称单一签出过滤器/过滤器名称
filter-class org . jasig . cas . client . session . singletingoutfilter/filter-class
/filter
过滤映射
过滤器名称单一签出过滤器/过滤器名称
url模式/*/u
rl-pattern></filter-mapping>
<!-- 该过滤器负责用户的认证工作,必须启用它 -->
<filter>
<filter-name>CASFilter</filter-name>
<filter-class>
org.jasig.cas.client.authentication.AuthenticationFilter</filter-class>
<init-param>
<param-name>casServerLoginUrl</param-name>
<param-value>http:///localhost:8080/cas/login</param-value>
<!--这里的 server 是cas服务端的 IP 和端口,根据所部属的服务端的ip端口做相应修改-->
</init-param>
<init-param>
<param-name>serverName</param-name>
<param-value>http://localhost:9091</param-value>
<!--这里的 是cas客户端项目的 访问地址,根据项目做相应修改-->
</init-param>
</filter>
<filter-mapping>
<filter-name>CASFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- 该过滤器负责对 Ticket 的校验工作,必须启用它 -->
<filter>
<filter-name>CAS Validation Filter</filter-name>
<filter-class>
org.jasig.cas.client.validation.Cas20ProxyReceivingTicketValidationFilter
</filter-class>
<init-param>
<param-name>casServerUrlPrefix</param-name>
<param-value>http:///localhost:8080/cas</param-value>
</init-param>
<init-param>
<param-name>serverName</param-name>
<param-value>http://localhost:9091</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CAS Validation Filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- 该过滤器负责实现 HttpServletRequest 请求的包裹, 比如允许开发者通过 HttpServletRequest 的 getRemoteUser()方法获得
SSO 登录用户的登录名,可选配置。 -->
<filter>
<filter-name>CAS HttpServletRequest Wrapper Filter</filter-name>
<filter-class>org.jasig.cas.client.util.HttpServletRequestWrapperFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>CAS HttpServletRequest Wrapper Filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- 该过滤器使得开发者可以通过 org.jasig.cas.client.util.AssertionHolder 来获取用户 的登录名。
比如 AssertionHolder.getAssertion().getPrincipal().getName()。 -->
<filter>
<filter-name>CAS Assertion Thread Local Filter</filter-name>
<filter-class>org.jasig.cas.client.util.AssertionThreadLocalFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>CAS Assertion Thread Local Filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
3.单点登录测试
(1)启动cas服务端
(2)启动客户端工程1和客户端工程2
(3)在浏览器分别访问两个客户端项目,均会跳转到cas登录页面,输入用户名密码,访问其中一个客户端项目后,再访问另一个客户端项目,不需要再进行登录,单点登录实现。
4.以上测试的登录页面是cas自带的登录页面,可改为自己项目的登录页面,同时可配置用户名和密码从数据库中读取,具体实现可参考其他资料,这里不再叙述。
End:喜欢我文章的朋友,麻烦点赞加关注,我会不定期的分享相关技术文章,谢谢!