【转】cas注册后自动登录

简介:   本文转自:http://denger.iteye.com/blog/805743    1. 关于CAS的介绍不再累述,我想涉及过SSO同学应该都会对该框架所有了解,我们目前项目采用的CAS Server 版本为 3.4.2.1, 其 CAS Client 版本为 3.1.10。

  本文转自:http://denger.iteye.com/blog/805743

   1. 关于CAS的介绍不再累述,我想涉及过SSO同学应该都会对该框架所有了解,我们目前项目采用的CAS Server 版本为 3.4.2.1, 其 CAS Client 版本为 3.1.10。 
         CAS项目官方:http://www.jasig.org/cas 
         本文讲述CAS登录处理未包括 CAS Client 与 Server 端的对 ST 采用SMAL验证的流程。 

     2. 对于登录其主要处理流程: 
         注册成功后 -> 调用CAS登录处理的相关模块 -> 验证用户名密码 -> 生成TGT -> 生成TG -> Add ST&TGT至相关Register类 -> Add TGT至Cookie -> 重定向至 cas/login URL -> 完成 

     3.  CAS 登录处理主要模块(类): 
              a. Credentials  用于存储用户登录认证信息接口。 
                  其默认实现类:org.jasig.cas.authentication.principal.UsernamePasswordCredentials 
              b. CentralAuthenticationService 用于生成 ST(Service Ticket) 和  TGT(TicketGrantingTicket)的认证服务类。 
                  其默认实现类: org.jasig.cas.CentralAuthenticationServiceImpl 
              c. CookieRetrievingCookieGenerator 用于将TGT添加至Cookie及对Cookie进行管理。 

     4.  具体实现代码: 

/** 
 * user register process and automatic login. 
 * @param userForm the user information object. 
 * @param request  the HttpServletRequest object 
 * @param response the HttpServletResponse object 
 * @return get result view 
 */  
protected ModelAndView handleUserRegisterInternal(UserInfoVo userForm, HttpServletRequest request, HttpServletResponse response) {  
      
    ModelAndView signinView = new ModelAndView(REGISTER_VIEW);;  
    final boolean isUnique = userService.checkUserUnique(userForm.getLoginName());  
    final boolean isRegistered = isUnique ? registerUser(userForm, request, response) : false;  
  
    if (isRegistered) {  
        bindTicketGrantingTicket(userForm.getLoginName(), userForm.getLoginPassword(), request, response);  
        signinView.setViewName(getSignInView(request));  
    }  
    return signinView;  
}  
/** 
 * Invoke generate validate Tickets and add the TGT to cookie. 
 * @param loginName     the user login name. 
 * @param loginPassword the user login password. 
 * @param request       the HttpServletRequest object. 
 * @param response      the HttpServletResponse object. 
 */  
protected void bindTicketGrantingTicket(String loginName, String loginPassword, HttpServletRequest request, HttpServletResponse response){  
    try {  
        UsernamePasswordCredentials credentials = new UsernamePasswordCredentials();  
        credentials.setUsername(loginName);  
        credentials.setPassword(loginPassword);  
        String ticketGrantingTicket = centralAuthenticationService.createTicketGrantingTicket(credentials);  
        ticketGrantingTicketCookieGenerator.addCookie(request, response, ticketGrantingTicket);  
    } catch (TicketException te) {  
        logger.error("Validate the login name " + loginName + " failure, can't bind the TGT!", te);  
    } catch (Exception e){  
        logger.error("bindTicketGrantingTicket has exception.", e);  
    }  
}  
/** 
 * Get the signIn view URL. 
 * @param request the HttpServletRequest object. 
 * @return redirect URL 
 */  
protected String getSignInView(HttpServletRequest request) {  
    String service = ServletRequestUtils.getStringParameter(request, "service", "");  
    return ("redirect:login" + (service.length() > 0 ? "?service=" + service : ""));  
}

 cas-servlet.xml 相关代码: 

<bean id="registerController" class="com.xxxxx.sso.web.RegisterController"   
    p:userService-ref="userService"  
    p:validator-ref="registerValidator"  
    p:centralAuthenticationService-ref="centralAuthenticationService"  
    p:ticketGrantingTicketCookieGenerator-ref="ticketGrantingTicketCookieGenerator"/>  

  注: 关于centralAuthenticationService及ticketGrantingTicketCookieGenerator已声明在 spring-configuration/applicationContext.xml 和 ticketGrantingTicketCookieGenerator.xml中 

相关文章
|
Java Maven
使用 maven 自动将源码打包并发布
使用 maven 自动将源码打包并发布
533 0
|
前端开发 索引
【IntelliJ IDEA】idea导入node_modules卡死,idea 忽略 node_modules 索引
【IntelliJ IDEA】idea导入node_modules卡死,idea 忽略 node_modules 索引
848 0
|
自然语言处理 搜索推荐 程序员
因为看不惯Notepad++,国内大佬开源了Notepad--:技术分享与工作学习中的新选择
【8月更文挑战第20天】在编程界,文本编辑器是每一位开发者日常工作中不可或缺的工具。Notepad++,这款曾经风靡一时的文本编辑器,以其强大的功能和简洁的界面赢得了众多程序员的喜爱。然而,近年来,由于其作者的一些不当言论和行为,引发了广泛争议,许多程序员开始寻找替代品。在这样的背景下,国内一位大佬挺身而出,开源了Notepad--,为开发者们带来了一个新的选择。
1454 1
|
人工智能 自然语言处理
AI ppt生成器 Tome(二)
Tome 是一个AI PPT生成器,能根据用户输入自动生成内容和图片。用户可通过工具栏与AI对话来调整PPT,支持样式定制。优点包括:AI生成内容(支持中英文)、图片生成、多媒体嵌入及多语言输入。缺点:不支持导出下载和模板有限。
|
SQL Java 数据库连接
MyBatis痛点验证,使用 foreach 批量插入慢?
MyBatis痛点验证,使用 foreach 批量插入慢?
753 0
|
XML Java 应用服务中间件
WebService - Axis2与Spring整合并发布多个service(同样使用services.xml)
WebService - Axis2与Spring整合并发布多个service(同样使用services.xml)
1101 0
|
NoSQL Java Redis
redis集群拓扑结构自动更新:使用Lettuce连接Cluster集群实例时异常处理(二)
redis集群拓扑结构自动更新:使用Lettuce连接Cluster集群实例时异常处理
1281 0
|
Web App开发 关系型数据库 PostgreSQL
|
前端开发 JavaScript
Bootstrap Table pagelist设置后失效
Bootstrap Table pagelist设置后失效
545 0
Bootstrap Table pagelist设置后失效
|
数据采集 缓存 数据可视化
Echarts高级进阶教程:图表渲染大数据量导致卡顿加载时间慢等问题的解决方案
Echarts高级进阶教程:图表渲染大数据量导致卡顿加载时间慢等问题的解决方案
3628 0