cas单点退出,登陆,区域获取信息,及切换特性注意事项
cas过滤器放前,不前于编码
http://blog.csdn.net/thc1987/article/details/8678645
web.xml
要加入单点登陆的过滤器,这个过滤器要放于其他过滤器之前,字符串编码过滤器之后
<filter>
<filter-name>characterEncoding</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>characterEncoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<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>
</filter>
<filter-mapping>
<filter-name>CAS Single Sign Out Filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter>
<filter-name>shiroFilter</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
<init-param>
<param-name>targetFilterLifecycle</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>shiroFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<jsp-config>
<jsp-property-group>
<url-pattern>*.jsp</url-pattern>
<page-encoding>UTF-8</page-encoding>
</jsp-property-group>
</jsp-config>
单点登陆:
shrio.xml最好不要配置自己的sessionManager,要么一个地方生产,其他项目地方公用,不可每个项目自己都生成一个sessionManager,虽然名字相同,但是值不同
所以不能根据这个cookie单点登陆
<!-- 安全管理器 -->
<bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">
<property name="realm" ref="casRealm" />
<property name="subjectFactory" ref="casSubjectFactory" />
<!-- <property name="sessionManager" ref="sessionManager" /> -->
<!-- <property name="cacheManager" ref="shiroEhcacheManager" /> -->
</bean>
至于不同项目头部登陆信息的显示就每个项目从cas取,控制展现(当实现繁琐困难的时候需要考虑到设计思路是否有问题(需要专门设计方案)例如这里可以用redis统一存储用户信息就不必考虑切换问题)
cas 一个单点切换到了另一个,那么登陆记录就在当前单点,切换的时候还是从切换前的端点来取,切换好了只能从当前切换后的项目取
前者涉及跨域请求用如下跨域获取cas,但是到了后者就可以直接用普通的ajax获取当前项目cas信息(当然jsop的原理同样适合本项目中),
在cas过滤管理中的url才有登陆信息放在cas中,一但有了之后再去请求不被过滤的url在它指向的方法里可以取到登陆信息了:
<script>
function jsonpcallback11(customerName){
alert("hd"+customerName);
var state="unlogin";
if(customerName!=''&&customerName!=null){
state="hadlogin";
}
document.getElementById("top-header-login-userName").innerHTML=customerName;//显示已登录用户信息
if(state=="hadlogin"){
document.getElementById("top-header-had-login").style.display="";//显示已登录用户信息
document.getElementById("top-header-un-login").style.display="none"; //隐藏未登录时信息
}
if(state=="unlogin"){
document.getElementById("top-header-had-login").style.display="none";//隐藏已登录用户信息
document.getElementById("top-header-un-login").style.display=""; //显示未登录时信息
}
if(state=="register"){
document.getElementById("top-header-had-login").style.display="none";//隐藏已登录用户信息
document.getElementById("top-header-un-login").style.display="none"; //隐藏未登录时信息
}
}
</script>
<script src="http://localhost:8081/web/siteindex.do/kyTop">
function jsonpcallback11(customerName){
alert("hd"+customerName);
var state="unlogin";
var dis= document.getElementById("top-header-had-login").style.display;
if((dis==''||dis==null)){
}else{
if((customerName!=''&&customerName!=null)){
state="hadlogin";
}
document.getElementById("top-header-login-userName").innerHTML=customerName;//显示已登录用户信息
if(state=="hadlogin"){
document.getElementById("top-header-had-login").style.display="";//显示已登录用户信息
document.getElementById("top-header-un-login").style.display="none"; //隐藏未登录时信息
}
if(state=="unlogin"){
document.getElementById("top-header-had-login").style.display="none";//隐藏已登录用户信息
document.getElementById("top-header-un-login").style.display=""; //显示未登录时信息
}
if(state=="register"){
document.getElementById("top-header-had-login").style.display="none";//隐藏已登录用户信息
document.getElementById("top-header-un-login").style.display="none"; //隐藏未登录时信息
}
}
}
</script>
后台:
至于打到前台的回调指令要不要加<script type=\"text/javascript\">看是<script src="http://localhost:8081/web/siteindex.do/kyTop">请求的还是
看请求的src标签是<script>的话就不要加,这个就已经有了(直接打在<srcipt>中),是form等的就要加,这个是直接打在页面上(后台返回页面的js会立即执行---这就形成了回调效果)
@RequestMapping(value = "/kyTop")
@ResponseBody
public void kyTop(Model model,HttpServletRequest request,HttpServletResponse response, HttpSession session) throws IOException {
/*CusUserBean cusUserBean = CASUtil.getCusUserBean();*/
CusFirmBean cusFirmBean= CASUtil.getCustomer();
//request.getSession().setAttribute(Constants.SESSION_FIRM, cusUserBean);
response.setCharacterEncoding("UTF-8");
if(cusFirmBean!=null){
//String dx=JSONUtils.valueToString(JSONObject.fromObject(cusFirmBean)) ;
//response.getWriter().write("jsonpcallback11"+ "('"+cusFirmBean.getCustomerName()+"');");//moduleId
String dx="<script type=\"text/javascript\">alert(1);this.jsonpcallback11"+ "("+cusFirmBean.getEnglishName()+");</script>";
response.getWriter().write("jsonpcallback11"+ "('"+cusFirmBean.getEnglishName()+"');");//moduleId
//response.getWriter().write(dx);
}
else{
response.getWriter().write("jsonpcallback11"+ "();");//moduleId
}
// return "frame/index.p";
}
二:
证件动态上传:
这是form请求打回的没有<script>所以要加<script type=\"text/javascript\">
<form action="${pageContext.request.contextPath}/account/tbCusFirmChg/uploadSave?allowFileType=${allowFileType}&callBackFunction=${callBackFunction}&virtualSavePath=${virtualSavePath}&fileType=${fileType}" method="post" enctype="multipart/form-data" >
<input type="file" name="file" id="file">
<input type="submit" value="上传" style="height:22px">
</form>
后台
if("PIC".equals(upMap.get("fileType"))){
is_delete_old_image = true;
lessFileName=new SimpleDateFormat("HHmmss").format(new Date())+getRandStr("",6)+".jpg";
lessUrl="/"+path+"/"+lessFileName;
String re =ImageUtil.lessImageTfs(fileFileName, lessFileName, 1);
lessUrl="/"+path+"/"+re;
if("".equals(re)){
is_delete_old_image = false;
lessUrl=url;
}
ResponseUtil.print("<script type=\"text/javascript\">parent." + upMap.get("callBackFunction") + "('/file/upload/originName/" + re + "/open','" + StaticVariables.Base_Path + "','" + filePath + "','" + fileSize + "','" + fileFileName + "','" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()) + "');history.back();</script>", response);
return null;
}
相关推荐
在这个例子中,我们基于Spring MVC、Maven、WebService和Memcached来实现一个功能完善的单点登录系统,同时支持完全跨域和单点退出。 1. **Spring MVC**: Spring MVC是Spring框架的一个模块,主要用于构建Web应用...
在描述中提到的“CAS单点登出问题及解决”,暗示了在实际操作中可能会遇到一些挑战,比如跨域问题、登出通知不及时等,需要通过特定的技术手段来解决。在这个过程中,通常会涉及到以下三个关键类: 1. **Simple...
加密密钥(sso.secretkey)确保了单点登录信息的安全,而cookie的名称(sso.cookie.name)和域(sso.cookie.domain)则决定了cookie的作用范围和跨域能力。 Kisso提供了一个统一的登录验证拦截器,可以通过Spring的...
标题中的“CAS实现单点登录,登出(Java和PHP客户端)”指的是使用中央认证服务(Central Authentication Service,简称CAS)来构建一个跨域、跨平台的单点登录(Single Sign-On, SSO)系统。在这样的系统中,用户只...
单点登录(Single Sign-On,简称SSO)是一种网络用户身份验证的机制,它允许用户在一次登录后,能够在多个相互关联的应用系统中自由切换,而无需再次输入认证信息。在Java开发环境中,实现完全跨域的单点登录是一项...
但是,在单点登录场景下,有时我们需要在主页面和嵌入的iframe之间传递认证信息,以实现在多个应用间的无缝切换。 该压缩包文件"单点登录跨域iframe互相通信方案.zip"提供了一种解决方案,可能包含以下关键知识点:...
**基于Cas的单点登录实现** 单点登录(Single Sign-On,简称SSO)是一种在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统的技术。它为用户提供了一种方便、高效的访问多系统的方式,同时减少...
.NET CAS(Central Authentication Service,中央认证服务)是Java平台上的一个开源身份验证框架,但同样可以与.NET环境集成,实现跨域的单点登录(Single Sign-On,简称SSO)。在.NET环境中,开发者通常会利用CAS...
跨域访问的单点登录(Single Sign-On, SSO)是一种网络身份验证机制,它允许用户在一个认证域中登录后,无需再次输入凭证即可访问其他相互信任的不同域上的应用程序或服务。这种技术在多系统集成、企业级应用以及...
Java跨域单点登录(Single Sign-On,SSO)实现是一项关键的系统集成技术,它允许用户在多个应用系统中只需登录一次,就能访问所有相互信任的应用系统,无需再次进行身份验证。本项目代码着重展示了如何在Java环境中...
### CAS 单点登录使用文档知识点详解 #### 一、CAS单点登录系统概述 - **定义**: CAS(Central Authentication Service)是由耶鲁大学开发的一种单点登录验证系统,广泛应用于多个领域,如教育机构、企业等场景中...
那就意味着做单点登录咯,至于不知道什么是单点登录的同学,建议去找一下万能的度娘。 刚接到这个需求的时候,老夫心里便不屑的认为:区区登录何足挂齿,但是,开发的过程狠狠的打了我一巴掌(火辣辣的一巴掌)。。...
点登录系统设计...............................................135.2.1...CAS 关键技术..................................................................176.1 域名规范...........................................
在"asp.net 跨域单点登陆Demo"中,可能包含了实现上述概念的代码示例,如身份验证控制器、票据生成和验证逻辑、以及配置文件中的相关设置。通过对这个Demo的深入学习和实践,开发者可以掌握如何在ASP.NET环境中搭建...
单点登录(SSO)的技术被越来越广泛地运用到各个领域的软件系统当中。本文从业务的角度分析了单点登录的需求和应用领域;从技术本身的角度分析了单点登录技术的内部机制和实现手段,并且给出Web-SSO和桌面SSO的实现...
jQuery使用ajax跨域获取数据
标题中的“跨域获取其他网站rss信息”是指在小程序或者Web应用中,通过编程方式跨越浏览器的同源策略限制,从其他域名下获取RSS(Really Simple Syndication)订阅信息的技术。RSS是一种内容发布格式,常用于博客、...
CAS(Central Authentication Service)是基于Java的一个开源身份验证框架,常用于实现单点登录(Single Sign-On, SSO)。在本文中,我们将深入探讨如何进行CAS客户端集成,以实现单点登录的登录登出功能。 单点...