cas java单点登录_java单点登录系统CAS的简单使用
http://blog.csdn.net/yunye114105/article/details/7997041
參考:
http://blog.csdn.net/diyagea/article/details/50638737
(配置SSL協(xié)議)http://www.cnblogs.com/notDog/p/5264666.html
背景
有幾個(gè)相對(duì)獨(dú)立的java的web應(yīng)用系統(tǒng), 各自有自己的登陸驗(yàn)證功能,用戶在使用不同的系統(tǒng)的時(shí)候,需要登陸不同的系統(tǒng)。現(xiàn)在需要提供一個(gè)統(tǒng)一的登陸/登出界面, 而不修改各個(gè)系統(tǒng)原來的登陸驗(yàn)證機(jī)制。于是采用單點(diǎn)登錄系統(tǒng)CAS。
使用步驟
要使用單點(diǎn)登錄,需要部署CAS系統(tǒng), CAS服務(wù)端可以直接部署在tomcat下運(yùn)行, 對(duì)于CAS服務(wù)端來說,所有要集成單點(diǎn)登錄的web應(yīng)用都是它的一個(gè)客戶端, CAS有客戶端jar包, 客戶端web應(yīng)用需要引入CAS客戶端的jar包,這樣CAS系統(tǒng)的服務(wù)端和客戶端web應(yīng)用程序端才能通信。
客戶端web應(yīng)用程序的通過配置web.xml,添加CAS需要的各種過濾器,來實(shí)現(xiàn)和CAS服務(wù)器通信, 用戶信息驗(yàn)證工作在CAS服務(wù)端統(tǒng)一完成, 驗(yàn)證通過后,客戶端web應(yīng)用程序只需要補(bǔ)全自己的Session信息即可。
各個(gè)客戶端web應(yīng)用程序需要使用一個(gè)公用的用戶表。
第一步 部署CAS系統(tǒng)服務(wù)端
1.從官網(wǎng)http://developer.jasig.org/cas/下載CAS Server, 將cas-server-webapp-3.4.12.war解壓, 可以看到是一個(gè)標(biāo)準(zhǔn)的java的web應(yīng)用, 可以直接部署到tomcat的webapps目錄下的,我這里假設(shè)部署的路徑是{tomcat_home}/webapps/cas。
2. CAS默認(rèn)需要tomcat配置SSL協(xié)議,使用https協(xié)議通信的。 由于項(xiàng)目是企事業(yè)單位內(nèi)部的系統(tǒng),不需要這么高的安全級(jí)別, 可以簡化操作,不走SSL協(xié)議。修改下配置文件\WEB-INF\spring-configuration\ticketGrantingTicketCookieGenerator.xml, 如下, 將默認(rèn)的true改成false即可。
p:cookieSecure="false"
p:cookieMaxAge="-1"
p:cookieName="CASTGC"
p:cookiePath="/cas"?/>
3.配置登錄的驗(yàn)證邏輯, 修改配置文件cas\WEB-INF\deployerConfigContext.xml。在authenticationHandlers中配置驗(yàn)證方式,我這里配置數(shù)據(jù)庫查詢語句來實(shí)現(xiàn)用戶名和密碼的驗(yàn)證。
p:httpClient-ref="httpClient"?/>
?-->密碼加密方法我這里使用MD5, 配置passwordEncoder的bean
在配置一個(gè)名稱為dataSource的數(shù)據(jù)源
數(shù)據(jù)源的配置根據(jù)自己的實(shí)際情況來配置, 需要的jar如果lib下面沒有,自己復(fù)制進(jìn)去, 不然數(shù)據(jù)源連不上報(bào)錯(cuò)。
4. 現(xiàn)在服務(wù)端就配置好了, 如果需要定制登錄/登出頁面的話(實(shí)際項(xiàng)目基本上都需要修改), 修改cas\WEB-INF\view\jsp\default\ui\下面的casLoginView.jsp和casLogoutView.jsp就可以了
第二步 客戶端web應(yīng)用程序集成CAS
1. 從官網(wǎng) http://developer.jasig.org/cas-clients/?下載CAS Client, 將客戶端的jar,如cas-client-core-3.2.1.jar引入到web應(yīng)用程序的classpath中
2 .配置web.xml文件, 主要是添加過濾器攔截通信, 下面的實(shí)例代碼, 假設(shè)web應(yīng)用程序的端口是8080
CAS?Single?Sign?Out?Filter
org.jasig.cas.client.session.SingleSignOutFilter
CAS?Single?Sign?Out?Filter
/*
org.jasig.cas.client.session.SingleSignOutHttpSessionListener
CASFilter
org.jasig.cas.client.authentication.AuthenticationFilter
casServerLoginUrl
http://CAS服務(wù)端所在服務(wù)器IP:8080/cas/login
serverName
http://具體web應(yīng)用程序所在服務(wù)器IP:8080
CASFilter
/*
CAS?Validation?Filter
org.jasig.cas.client.validation.Cas20ProxyReceivingTicketValidationFilter
casServerUrlPrefix
http://CAS服務(wù)端所在服務(wù)器IP:8080/cas
serverName
http://具體web應(yīng)用程序所在服務(wù)器IP:8080
renew
false
gateway
false
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
/*
CasForInvokeContextFilter
com.cm.demo.filter.CasForInvokeContextFilter
appId
a5ea611bbff7474a81753697a1714fb0
CasForInvokeContextFilter
/*
4. 注意上步配置文件中,過濾器CasForInvokeContextFilter的實(shí)現(xiàn)是需要在具體的應(yīng)用中實(shí)現(xiàn)的,他的目的是, CAS服務(wù)端登錄驗(yàn)證成功后,會(huì)將登錄用戶的用戶名攜帶回來, 這時(shí)客戶端web應(yīng)用程序需要根據(jù)用戶名從數(shù)據(jù)庫用戶表中查詢到用戶的Id等信息, 并填充到Session中, 這樣,客戶端應(yīng)用程序原來的驗(yàn)證邏輯就不會(huì)出問題了, 因?yàn)槲覀円话愣际峭ㄟ^驗(yàn)證session中是否含有當(dāng)前登錄的用戶的ID來進(jìn)行登錄驗(yàn)證的。
下面是CasForInvokeContextFilter的一個(gè)簡單實(shí)現(xiàn)。
/**
*?該過濾器用戶從CAS認(rèn)證服務(wù)器中獲取登錄用戶用戶名,并填充必要的Session.
*?@author?jiarong_cheng
*?@created?2012-7-12
*/
public?class?CasForInvokeContextFilter?implements?Filter?{
@Override
public?void?destroy()?{
}
@Override
public?void?doFilter(ServletRequest?request,?ServletResponse?response,
FilterChain?chain)?throws?IOException,?ServletException?{
HttpSession?session?=?((HttpServletRequest)?request).getSession();
//如果session中沒有用戶信息,則填充用戶信息
if?(session.getAttribute("j_userId")?==?null)?{
//從Cas服務(wù)器獲取登錄賬戶的用戶名
Assertion?assertion?=?AssertionHolder.getAssertion();
String?userName?=?assertion.getPrincipal().getName();
try?{
//根據(jù)單點(diǎn)登錄的賬戶的用戶名,從數(shù)據(jù)庫用戶表查找用戶信息,?填充到session中
User?user?=?UserDao.getUserByName(userName);
session.setAttribute("username",?userName);
session.setAttribute("userId",?user.getId());
}?catch?(Exception?e)?{
e.printStackTrace();
}
}
chain.doFilter(request,?response);
}
@Override
public?void?init(FilterConfig?config)?throws?ServletException?{
}
}
到此,就完成了, 當(dāng)你訪問具體應(yīng)用的網(wǎng)址, 如http://具體應(yīng)用IP: 8080/ ,就會(huì)跳轉(zhuǎn)到CAS服務(wù)器的登陸頁面:?http://CAS服務(wù)器IP: 8080/ ?進(jìn)行登錄驗(yàn)證, 驗(yàn)證通過后, 又會(huì)跳轉(zhuǎn)回應(yīng)用的網(wǎng)址。
第三步 單點(diǎn)登出
這個(gè)比較簡單, 只要在系統(tǒng)的登出事件中, 將URL訪問地址指向CAS服務(wù)登出的servlet, 就可以了。
http://CAS服務(wù)器IP:8080/cas/logout
總結(jié)
以上是生活随笔為你收集整理的cas java单点登录_java单点登录系统CAS的简单使用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux dhcp 负载均衡,dhcp
- 下一篇: arduinowin7_win7系统64