【SSO單點(diǎn)系列】(7):CAS4.0 二級(jí)域名
CAS4.0 二級(jí)域名一、描述當(dāng)cas 成功登錄后如果訪問(wèn)同一域名下的資源是被當(dāng)作同一應(yīng)用下資源不需要再次請(qǐng)求登錄,但是如果二級(jí)域名不同會(huì)被當(dāng)作不同應(yīng)用在訪問(wèn)需要請(qǐng)求CAS在請(qǐng)求時(shí)會(huì)把TGC 傳給CA
CAS4.0 二級(jí)域名
一、描述
當(dāng)cas 成功登錄后如果訪問(wèn)同一域名下的資源是被當(dāng)作同一應(yīng)用下資源不需要再次請(qǐng)求登錄,但是如果二級(jí)域名不同會(huì)被當(dāng)作不同應(yīng)用在訪問(wèn)需要請(qǐng)求CAS
在請(qǐng)求時(shí)會(huì)把TGC 傳給CAS CAS 驗(yàn)證TGC 有效返回資源頁(yè)面本身是沒(méi)有問(wèn)題的但是在返回時(shí)地址會(huì)被重寫就不再是新生成的二級(jí)域名了
所以項(xiàng)目中無(wú)法區(qū)分二級(jí)域名了
二、思路
在登錄成功后就自己寫入session 不用原來(lái)的域名
三、實(shí)現(xiàn)
AuthenticationFilter.java
方法doFilter 新增 final HttpServletRequest request = (HttpServletRequest) servletRequest;
final HttpServletResponse response = (HttpServletResponse) servletResponse;
Cookie c1 = null;
Cookie[] co=request.getCookies();
if (co!=null ){
for (Cookie c:co){
if (c.getName().equals("JSESSIONID" )){
c1= c;
break;
}
}
}
//驗(yàn)證
String serverName = request.getHeader("X-Real-HOST" ) ;
if (StringUtils.isEmpty (serverName)){
serverName=request.getServerName();
}
Domain domain = new Domain();
domain.initDomain(serverName, request) ;
if (c1==null ){
c1 = new javax.servlet.http.Cookie("JSESSIONID" , request.getSession().getId());
c1.setDomain("." request.getAttribute("domain" )) ;
c1.setPath("/") ;
response.addCookie(c1);
}