Inhaltsverzeichnis
登录成功,这是客户端1啊
Successfull Authentication!这是客户端1
Heim Backend-Entwicklung PHP-Tutorial cas实现单点登录,登出(java跟php客户端) (转)

cas实现单点登录,登出(java跟php客户端) (转)

Jun 13, 2016 pm 12:29 PM
cas filter gt lt name

cas实现单点登录,登出(java和php客户端) (转)

最近项目中需要做单点登录,客户端包含java和php,java有几个应用程序,php是discuz+supesite+ucenter,需

?

要这几个客户端都要能单点登录和登出,在网上找了许多相关资料,今天终于配置成功,步骤如下:

?

1、cas服务端:下载地址:http://downloads.jasig.org/cas/cas的服务端和客户端有许多版本,最新版本和老版本

?

有很大的区别,目前服务端最新版本为:cas-server-3.4.4-release.zip

?

解压cas-server-3.4.4-release.zip将modules目录下的cas-server-webapp-3.4.4.war改名称为cas.war复制到

?

tomcat的webapps下,启动tomcat,访问:http://localhost:8080/cas/login 就可以看到登录界面了:


cas服务端默认采用的是 用户名=密码的验证,并且采用的是https验证,需要给tomact配置证书,本系统没有采用https验证,若采用https验证可参考:

?

http://blog.csdn.net/haydenwang8287/archive/2010/07/26/5765941.aspx

?

1.1、若不采用https验证,服务器端需要配置

1、cas\WEB-INF\deployerConfigContext.xml

p:httpClient-ref="httpClient"/>

?

?增加参数p:requireSecure="false",是否需要安全验证,即HTTPS,false为不采用,加上去之后如下:

?

?p:httpClient-ref="httpClient"? p:requireSecure="false"/>

?

2、cas\WEB-INF\spring-configuration\

ticketGrantingTicketCookieGenerator.xml

????? p:cookieSecure="true"

????? p:cookieMaxAge="-1"

????? p:cookieName="CASTGC"

????? p:cookiePath="/cas" />

?

参数p:cookieSecure="true",同理为HTTPS验证相关,TRUE为采用HTTPS验证,FALSE为不采用https验证。

参数p:cookieMaxAge="-1",简单说是COOKIE的最大生命周期,-1为无生命周期,即只在当前打开的IE窗口有效,IE关闭或重新打开其它窗口,仍会要求验证。可以根据需要修改为大于0的数字,比如3600等,意思是在3600秒内,打开任意IE窗口,都不需要验证。

?

1.2、服务器端退出访问:http://localhost:8080/cas/logout,

?

?

若希望退出后能返回则需要配置

服务端cas-servlet.xml配置

增加属性 p:followServiceRedirects="true"

?

退出链接为:http://localhost:8080/cas/logout?service=http://localhost:8080/Casclient/index.jsp

?

1.3、更改服务器端验证方式,采用数据库验证:

修改配置文件deployerConfigContext.xml,加dbcp连接池:(以oracle为例)

?


????
????????? oracle.jdbc.driver.OracleDriver
????

????
????????? jdbc:oracle:thin:@192.168.18.26:1521:orcl
????

????
????????? test
????

????
????????? test
????

??

?

需要的jar包有:(见附件:cas-server-support-jdbc-3.4.4.jar,commons-dbcp-1.2.1.jar,commons-pool-1.3.jar,ojdbc14_g.jar)

?

配置加密方式,cas内置的有MD5加密,也可以写自己的加密类,实现org.jasig.cas.authentication.handler.PasswordEncoder接口即可:

? ???? class="org.jasig.cas.authentication.handler.DefaultPasswordEncoder" autowire="byName">?????
??? ?
??

?

注释掉默认的验证方式,采用数据库查询验证:


?????
?????
????

?

?????
?????
????? ???????? value="select password from userinfo where lower(username) = lower(?)" />
?????
?????

???
??

?

---------------到这里cas服务端的配置就完成了。

?

?

2、java客户端配置,下载客户端:http://downloads.jasig.org/cas-clients/,目前最新版本为:cas-client-3.2.0

?

将modules下的jar复制到java客户端Casclient1的lib下,在web.xml中配置过滤器,配置如下(详情见附件):


?xmlns="
http://java.sun.com/xml/ns/j2ee"
?xmlns:xsi="
http://www.w3.org/2001/XMLSchema-instance"
?xsi:schemaLocation="
http://java.sun.com/xml/ns/j2ee
?
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
?
?
?

?
???????? org.jasig.cas.client.session.SingleSignOutHttpSessionListener
?

?

?
???????? CAS Single Sign Out Filter
???????? org.jasig.cas.client.session.SingleSignOutFilter
?

?
???????? CAS Single Sign Out Filter
???????? /*
?

?
?
?
???????? CASFilter
???????? org.jasig.cas.client.authentication.AuthenticationFilter
????????
???????????????? casServerLoginUrl
???????????????? http://192.168.18.8:8080/cas/login
????????????????
????????

????????
???????????????? serverName
???????????????? http://192.168.18.8:8989
????????

?

?
???????? CASFilter
???????? /*
?

?
?
?
???????? CAS Validation Filter
????????
???????????????? org.jasig.cas.client.validation.Cas20ProxyReceivingTicketValidationFilter

????????
???????????????? casServerUrlPrefix
???????????????? http://192.168.18.8:8080/cas
????????

????????
???????????????? serverName
???????????????? http://192.168.18.8:8989
????????

?

?
???????? CAS Validation Filter
???????? /*
?

?
?
?
???????? CAS HttpServletRequest Wrapper Filter
????????
???????????????? org.jasig.cas.client.util.HttpServletRequestWrapperFilter

?

?
???????? CAS HttpServletRequest Wrapper Filter
???????? /*
?


??????? CAS Assertion Thread Local Filter
??????? org.jasig.cas.client.util.AssertionThreadLocalFilter


??????? CAS Assertion Thread Local Filter
??????? /*

?
?
?
??? index.jsp
?

?

页面为:

AttributePrincipal principal = (AttributePrincipal)request.getUserPrincipal();???
String username = principal.getName();
%>

----------------------------------------------------------

登录成功,这是客户端1啊



用户名:

http://localhost:8989/Casclient2/index.jsp">进入客户端2

http://localhost:8080/cas/logout?service=http://localhost:8989/Casclient1/index.jsp">退出

?

-----------到这里java客户端配置成功,发布到tomcat,复制Casclient1改名为Casclient2,启动tomcat,

?

访问Casclient1,跳转到登录页面,登录成功后成功转向登录成功页面,这时访问Casclient2发现不需要登录即显示登录成功页面,java单点登录成功。

?

?

3、配置php客户端,下载php客户端:http://downloads.jasig.org/cas-clients/php/?,目前最新版本为:CAS-1.2.0RC2

?

新建php工程:Phpcasclient1,将CAS文件夹和CAS.php复制到工程中,修改CAS/client.php,将其中的https改为http,将docs/examples/example_simple.php

?

复制到工程中,修改如下:

//
// phpCAS simple client
//

// import phpCAS lib
include_once('CAS.php');

phpCAS::setDebug();

// initialize phpCAS
phpCAS::client(CAS_VERSION_2_0,'192.168.18.8',8080,'cas');

// no SSL validation for the CAS server
phpCAS::setNoCasServerValidation();

// force CAS authentication
phpCAS::forceAuthentication();

// at this step, the user has been authenticated by the CAS server
// and the user's login name can be read with phpCAS::getUser().

// logout if desired
if (isset($_REQUEST['logout'])) {

?

?$param=array("service"=>"http://localhost/Phpcasclient1/example_simple.php");//退出登录后返回

?phpCAS::logout($param);


}

// for this test, simply print that the authentication was successfull
?>

?
??? phpCAS simple client
?
?
???

Successfull Authentication!这是客户端1


???

the user's login is .


???

phpCAS version is .


?????

http://192.168.18.8:8989/Casclient1/index.jsp

">去java客户端1


?????

退出


?

?

php配置需要开启php_curl,可以复制Phpcasclient1为Phpcasclient2

?

访问:http://localhost/Phpcasclient1/example_simple.php,跳转到登录页面,登录成功后访问Phpcasclient2,不需要登录,

?

php单点登录成功,这时再访问java客户端发现也不需要登录,php和java应用之间单点登录成功。

?

注:php的phpCAS::client(CAS_VERSION_2_0,'192.168.18.8',8080,'cas');地址需要和java的web.xml中的cas服务器地址一致,我开始一个写的ip:192.168.18.8,一个写的localhost,

php和java总是不能同步登录,郁闷了好久

?

----------------到这里java和php的客户端已经配置完成,现在你会发现php和java之间不能单点登出,php端退出java客户端也退出,反之java退出但是php却没有同步退出

?

这里需要做一个配置,在

phpCAS::setNoCasServerValidation();

// force CAS authentication
phpCAS::forceAuthentication();

这里加上

?

phpCAS::setNoCasServerValidation();

// force CAS authentication

phpCAS::handleLogoutRequests();? 这里会检测服务器端java退出的通知,就能实现php和java间同步登出了。

phpCAS::forceAuthentication();

?

?

?

至于discuz+supesite的单点登录,再了解了php单点登录的原理后就需要改造discuz+supesite的登录代码了,discuz的为logging.php

?

supersite的为batch.login.php,俺是做java开发的,对php不是很熟悉,所以改造的觉得不是很靠谱,大致是先让discuz单点登录,获取用户名,根据用户

?

获取数据库中的密码再交给discuz系统自己的登录系统登录。discuz是采用cookie验证的,所以在java端退出后,discuz不会退出。

?

若谁有改造很成功的可以交流下。

?

参考网址:

http://blog.csdn.net/DL88250/archive/2008/08/20/2799522.aspx

http://www.wsria.com/archives/1349

http://tonrenyuye.blog.163.com/blog/static/30012576200922925820471/

http://www.discuz.net/thread-1416206-1-1.html

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Chat -Befehle und wie man sie benutzt
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Was sind die Unterschiede zwischen Huawei GT3 Pro und GT4? Was sind die Unterschiede zwischen Huawei GT3 Pro und GT4? Dec 29, 2023 pm 02:27 PM

Viele Benutzer werden sich bei der Auswahl von Smartwatches für die Marke Huawei entscheiden. Viele Benutzer sind neugierig auf den Unterschied zwischen Huawei GT3pro und GT4. Was sind die Unterschiede zwischen Huawei GT3pro und GT4? 1. Aussehen GT4: 46 mm und 41 mm, das Material ist Glasspiegel + Edelstahlgehäuse + hochauflösende Faserrückschale. GT3pro: 46,6 mm und 42,9 mm, das Material ist Saphirglas + Titangehäuse/Keramikgehäuse + Keramikrückschale 2. Gesundes GT4: Mit dem neuesten Huawei Truseen5.5+-Algorithmus werden die Ergebnisse genauer. GT3pro: EKG-Elektrokardiogramm sowie Blutgefäß und Sicherheit hinzugefügt

Fix: Snipping-Tool funktioniert unter Windows 11 nicht Fix: Snipping-Tool funktioniert unter Windows 11 nicht Aug 24, 2023 am 09:48 AM

Warum das Snipping-Tool unter Windows 11 nicht funktioniert Das Verständnis der Grundursache des Problems kann dabei helfen, die richtige Lösung zu finden. Hier sind die häufigsten Gründe, warum das Snipping Tool möglicherweise nicht ordnungsgemäß funktioniert: Focus Assistant ist aktiviert: Dies verhindert, dass das Snipping Tool geöffnet wird. Beschädigte Anwendung: Wenn das Snipping-Tool beim Start abstürzt, ist es möglicherweise beschädigt. Veraltete Grafiktreiber: Inkompatible Treiber können das Snipping-Tool beeinträchtigen. Störungen durch andere Anwendungen: Andere laufende Anwendungen können mit dem Snipping Tool in Konflikt geraten. Das Zertifikat ist abgelaufen: Ein Fehler während des Upgrade-Vorgangs kann zu diesem Problem führen. Diese einfache Lösung ist für die meisten Benutzer geeignet und erfordert keine besonderen technischen Kenntnisse. 1. Aktualisieren Sie Windows- und Microsoft Store-Apps

So beheben Sie den Fehler „[Vue-Warnung]: Fehler beim Auflösen des Filters'. So beheben Sie den Fehler „[Vue-Warnung]: Fehler beim Auflösen des Filters'. Aug 19, 2023 pm 03:33 PM

Methoden zur Behebung des Fehlers „[Vuewarn]:Failedtoresolvefilter“ Während des Entwicklungsprozesses mit Vue stoßen wir manchmal auf eine Fehlermeldung: „[Vuewarn]:Failedtoresolvefilter“. Diese Fehlermeldung tritt normalerweise auf, wenn wir in der Vorlage einen undefinierten Filter verwenden. In diesem Artikel wird erläutert, wie dieser Fehler behoben werden kann, und es werden entsprechende Codebeispiele aufgeführt. Wenn wir in Vue sind

So beheben Sie den Fehler „Verbindung zum App Store nicht möglich' auf dem iPhone So beheben Sie den Fehler „Verbindung zum App Store nicht möglich' auf dem iPhone Jul 29, 2023 am 08:22 AM

Teil 1: Erste Schritte zur Fehlerbehebung Überprüfen des Apple-Systemstatus: Bevor wir uns mit komplexen Lösungen befassen, beginnen wir mit den Grundlagen. Das Problem liegt möglicherweise nicht an Ihrem Gerät; die Server von Apple sind möglicherweise ausgefallen. Besuchen Sie die Systemstatusseite von Apple, um zu sehen, ob der AppStore ordnungsgemäß funktioniert. Wenn es ein Problem gibt, können Sie nur warten, bis Apple es behebt. Überprüfen Sie Ihre Internetverbindung: Stellen Sie sicher, dass Sie über eine stabile Internetverbindung verfügen, da das Problem „Verbindung zum AppStore nicht möglich“ manchmal auf eine schlechte Verbindung zurückzuführen ist. Versuchen Sie, zwischen WLAN und mobilen Daten zu wechseln oder die Netzwerkeinstellungen zurückzusetzen (Allgemein > Zurücksetzen > Netzwerkeinstellungen zurücksetzen > Einstellungen). Aktualisieren Sie Ihre iOS-Version:

php提交表单通过后,弹出的对话框怎样在当前页弹出,该如何解决 php提交表单通过后,弹出的对话框怎样在当前页弹出,该如何解决 Jun 13, 2016 am 10:23 AM

php提交表单通过后,弹出的对话框怎样在当前页弹出php提交表单通过后,弹出的对话框怎样在当前页弹出而不是在空白页弹出?想实现这样的效果:而不是空白页弹出:------解决方案--------------------如果你的验证用PHP在后端,那么就用Ajax;仅供参考:HTML code

Implementieren Sie die PHP-Sicherheitsüberprüfung über CAS (Central Authentication Service). Implementieren Sie die PHP-Sicherheitsüberprüfung über CAS (Central Authentication Service). Jul 24, 2023 pm 12:49 PM

PHP-Sicherheitsüberprüfung durch CAS (CentralAuthenticationService) Mit der rasanten Entwicklung des Internets werden Benutzerrechteverwaltung und Identitätsüberprüfung immer wichtiger. Bei der Entwicklung von Webanwendungen ist es von entscheidender Bedeutung, Benutzerdaten zu schützen und unbefugten Zugriff zu verhindern. Um dieses Ziel zu erreichen, können wir CAS (CentralAuthenticationService) zur PHP-Sicherheitsüberprüfung verwenden. CAS

Was ist das Konzept von Java CAS? Was ist das Konzept von Java CAS? May 03, 2023 pm 09:34 PM

1. Erklären Sie, dass, wenn mehrere Threads gleichzeitig CAS-Operationen für eine Ressource ausführen, nur ein Thread erfolgreich ist, andere Threads jedoch nicht blockiert werden und andere Threads nur ein Signal erhalten, dass die Operation fehlgeschlagen ist. Es ist ersichtlich, dass CAS tatsächlich eine optimistische Sperre ist. 2. Wenn wir dem AtomInteger-Code folgen, können wir feststellen, dass letztendlich sum.misc.Unsafe aufgerufen wird. Schauen Sie sich den Namen „Unsafe“ an. Dabei handelt es sich um eine unsichere Klasse, die genau die richtigen Lücken in den Klassen- und Sichtbarkeitsregeln von Java ausnutzt. Aus Gründen der Geschwindigkeit geht Unsafe einige Kompromisse bei den Sicherheitsstandards von Java ein. publicfinalnativebooleancompareAndSwapInt(Objec

Ist watch4pro besser oder GT? Ist watch4pro besser oder GT? Sep 26, 2023 pm 02:45 PM

Watch4pro und GT verfügen jeweils über unterschiedliche Funktionen und Anwendungsszenarien. Wenn Sie Wert auf umfassende Funktionen, hohe Leistung und ein stilvolles Erscheinungsbild legen und bereit sind, einen höheren Preis in Kauf zu nehmen, ist Watch 4 Pro möglicherweise besser geeignet. Wenn Sie keine hohen funktionalen Ansprüche haben und mehr Wert auf Akkulaufzeit und einen angemessenen Preis legen, ist die GT-Serie möglicherweise besser geeignet. Die endgültige Wahl sollte auf der Grundlage persönlicher Bedürfnisse, Budgets und Vorlieben getroffen werden. Es wird empfohlen, vor dem Kauf Ihre eigenen Bedürfnisse sorgfältig zu prüfen und sich die Bewertungen und Vergleiche verschiedener Produkte anzusehen, um eine fundiertere Entscheidung zu treffen.

See all articles