900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > 03单点登录CAS5.3.4集成客户端

03单点登录CAS5.3.4集成客户端

时间:2023-01-06 05:43:04

相关推荐

03单点登录CAS5.3.4集成客户端

参照网址

参照网址

server代码地址

client1代码地址

client2代码地址

之前一直是server端登录验证。所谓单点登录(SSO),只当企业用户同时访问多个不同(类型的)应用时,他们只需要提供自身的用户凭证信息(比如用户名/密码)一次,当用户在不同的应用间切换时,他们不用再重复地输入自身的用户凭证了。所以此章写一下cas如何整合客户端

1.配置Host

#cas服务端127.0.0.1 #客户端1127.0.0.1 #客户端2127.0.0.1

2.cas服务端授权客户端

2.1 在cas-server-base的resources下新建文件夹services,新建配置文件web-10000001.json

{"@class" : "org.apereo.cas.services.RegexRegisteredService","serviceId" : "^(https|imaps|http)://.*","name" : "web","id" : 10000001,"description" : "所有的https或者http访问都允许通过","evaluationOrder" : 100}

注意:services目录中可包含多个JSON文件,其命名必须满足以下规则:name−{name}-name−{id}.json,id必须为json文件中内容id一致。

对其中属性的说明如下,更多详细内容见官方文档-Service-Management。 @class:必须为org.apereo.cas.services.RegisteredService的实现类serviceId:对服务进行描述的表达式,可用于匹配一个或多个 URL 地址name: 服务名称id:全局唯一标志description:服务描述,会显示在默认登录页evaluationOrder:定义多个服务的执行顺序

因为在CAS服务中,默认是提供了默认的Service配置项,所以如果添加的Json配置没起作用,可以尝试注释掉默认启动Json,在pom.xml文件里面进行配置,如下:<plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-war-plugin</artifactId><version>2.6</version><configuration><warName>cas</warName><failOnMissingWebXml>false</failOnMissingWebXml><recompressZippedFiles>false</recompressZippedFiles><archive><compress>false</compress><manifestFile>${project.build.directory}/war/work/org.apereo.cas/cas-server-webapp${app.server}/META-INF/MANIFEST.MF</manifestFile></archive><overlays><overlay><groupId>org.apereo.cas</groupId><artifactId>cas-server-webapp${app.server}</artifactId></overlay></overlays><dependentWarExcludes><!-- 在CAS服务中,默认是提供了默认的Service配置项,所以如果添加的Json配置没起作用,可以尝试注释掉默认启动Json让war包下的json不初始化-->**/services/*.json</dependentWarExcludes></configuration></plugin>

2.2 配置好service之后,根据官方文档-service-registry,还需修改 application.properties 文件告知 CAS 服务端从本地加载服务定义services文件

#注册客户端# 开启识别Json文件,默认falsecas.serviceRegistry.initFromJson=true#自动扫描服务配置,默认开启cas.serviceRegistry.watcherEnabled=true#120秒扫描一遍cas.serviceRegistry.schedule.repeatInterval=120000#延迟15秒开启cas.serviceRegistry.schedule.startDelay=15000# Json配置cas.serviceRegistry.json.location=classpath:/servicescas.serviceRegistry.managementType=DEFAULTcas.logout.followServiceRedirects=true

2.3 添加pom

<!-- JSON service--><dependency><groupId>org.apereo.cas</groupId><artifactId>cas-server-support-json-service-registry</artifactId><version>${cas.version}</version></dependency>

至此 cas server端配置完成

3.客户端配置

3.1 搭建客户端

下载官方提供的CAS Java客户端,cas-sample-java-webapp

3.2 修改pom.xml文件

<!-- 为了测试方便,两个客户端都是使用http协议,引入tomcat插件,方便测试,默认是jetty。端口修改为8081 启动maven命令为tomcat7:run-war 注意是tomcat7,写tomcat 8081端口不会生效--><!-- tomcat7 plugin --><plugin><groupId>org.apache.tomcat.maven</groupId><artifactId>tomcat7-maven-plugin</artifactId><version>2.2</version><configuration><port>8081</port><uriEncoding>UTF-8</uriEncoding><server>tomcat7</server><path>/</path></configuration></plugin>

将自带的jetty插件注释

3.3 修改web.xml 让客户端与服务端关联起来

客户端2的配置类似,只要将其中的:8081修改为:8082

<?xml version="1.0" encoding="UTF-8"?><web-app version="2.4" xmlns="/xml/ns/j2ee" xmlns:xsi="/2001/XMLSchema-instance"xsi:schemaLocation="/xml/ns/j2ee /xml/ns/j2ee/web-app_2_4.xsd"><!--<context-param><param-name>renew</param-name><param-value>true</param-value></context-param>--><display-name>cas-app</display-name><!-- ========================单点登录开始 ======================== --><!-- 用于单点退出,该过滤器用于实现单点登出功能,可选配置 --><listener><listener-class>org.jasig.cas.client.session.SingleSignOutHttpSessionListener</listener-class></listener><!-- 该过滤器用于实现单点登出功能,可选配置。 --><filter><filter-name>CAS Single Sign Out Filter</filter-name><filter-class>org.jasig.cas.client.session.SingleSignOutFilter</filter-class><init-param><param-name>casServerUrlPrefix</param-name><param-value>:8443/cas</param-value></init-param></filter><filter-mapping><filter-name>CAS Single Sign Out Filter</filter-name><url-pattern>/*</url-pattern></filter-mapping><!-- 该过滤器用于实现单点登录功能 --><filter><filter-name>CAS Filter</filter-name><filter-class>org.jasig.cas.client.authentication.AuthenticationFilter</filter-class><init-param><param-name>casServerLoginUrl</param-name><param-value>:8443/cas/login</param-value><!-- 使用的CAS-Server的登录地址,一定是到登录的action --></init-param><init-param><param-name>serverName</param-name><param-value>:8081</param-value><!-- 当前Client系统的地址 --></init-param></filter><filter-mapping><filter-name>CAS Filter</filter-name><url-pattern>/*</url-pattern></filter-mapping><!-- 该过滤器负责对Ticket的校验工作 --><filter><filter-name>CAS Validation Filter</filter-name><filter-class>org.jasig.cas.client.validation.Cas30ProxyReceivingTicketValidationFilter</filter-class><init-param><param-name>casServerUrlPrefix</param-name><param-value>:8443/cas</param-value><!-- 使用的CAS-Server的地址,一定是在浏览器输入该地址能正常打开CAS-Server的根地址 --></init-param><init-param><param-name>serverName</param-name><param-value>:8081</param-value><!-- 当前Client系统的地址 --></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()或者request.getUserPrincipal().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.4 修改登录后index.jsp标记登录的系统是哪个系统,用于区分客户端1.客户端2

<h1>当前为客户端2</h1><h2><a href=":8081/">客户端1</a></h2><h2><a href=":8082/">客户端2</a></h2>

3.5 启动测试

浏览器输入:8081会调转到:8443/cas/login页面,但是重定向回client1时报证书找不到

该问题网上都说是客户端jdk未导入证书导致的,但是我服务端和客户端是在同一台电脑上配置的,之前jdk就导入了证书

一直没有找到原因,很纳闷哪里有问题呀

因公司也只是局域网使用单点登录,所以暂时考虑去掉SSL步骤如下:

参考网址

1、服务端的Tomcat改回普通的http Connector访问,比如用原来的8080端口配置方式。2、建议从客户端jre的证书仓库中删掉之前为做HTTPS单点登录加的那个证书:keytool -delete -alias cas -keystore C:/Java/jdk1.8.0_91/jre/lib/security/cacerts做完这两步还不够,你会发现每个客户端的访问虽然都需要登录服务端,但是彼此的登录状态是不互通的。所以还有第三步3、在application.properties里加上这么一句:cas.tgc.secure=false如果登录状态还是不互通,请清空浏览器的cookie,重开浏览器试试。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。