首页 > 编程知识 正文

sso机制(cas实现sso单点登录原理)

时间:2023-05-03 13:34:15 阅读:98383 作者:2527

一、理解单点登录的概念

在多应用系统或分布式系统中,用户只需要登录一次,然后访问其他系统,就不需要再次登录,自动登录。

二、单点登录的实施原则

要实现单点登录,主要有两个问题需要解决: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:喜欢我文章的朋友,麻烦点赞加关注,我会不定期的分享相关技术文章,谢谢!

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。