【转】cas注册后自动登录

简介:

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中 






本文转自秋楓博客园博客,原文链接:http://www.cnblogs.com/rwxwsblog/p/5156244.html,如需转载请自行联系原作者
目录
相关文章
|
存储 人工智能 算法
路径规划最全综述+代码+可视化绘图(Dijkstra算法+A*算法+RRT算法等)-1
路径规划最全综述+代码+可视化绘图(Dijkstra算法+A*算法+RRT算法等)-1
|
XML Java 程序员
Java SpringMVC实现PC端网页微信扫码支付完整版
Java SpringMVC实现PC端网页微信扫码支付完整版
735 0
|
存储 安全 Java
基于SpringBoot+Vue简历系统【源码(完整源码请私聊)+论文+演示视频+包运行成功】(1)
基于SpringBoot+Vue简历系统【源码(完整源码请私聊)+论文+演示视频+包运行成功】
177 0
|
XML 安全 小程序
java实现微信服务(公众)号用户关注时,获取openid,安全模式下的加密解密实现
java实现微信服务(公众)号用户关注时,获取openid,安全模式下的加密解密实现
1216 2
java实现微信服务(公众)号用户关注时,获取openid,安全模式下的加密解密实现
|
XML 安全 JavaScript
从零玩转第三方登录之WeChat公众号扫码关注登陆
从零玩转第三方登录之WeChat公众号扫码关注登陆
1343 0
|
Java 测试技术
5行代码实现微信消息推送,springboot实现微信推送,java微信推送
5行代码实现微信消息推送,springboot实现微信推送,java微信推送
785 0
|
弹性计算
云服务器按固定带宽和按使用流量怎么选?
阿里云服务器ECS按固定带宽和按使用流量怎么选?阿里云服务器公网带宽计费模式按固定带宽和按使用流量哪个划算?按固定带宽计费1M带宽一个月23元,按使用流量计费1GB流量0.8元,如果云服务器带宽使用率低于10%,那么首选按使用流量计费,如果带宽实际利用率较高的话,按固定带宽计费更划算一些。云服务器吧来详细说下阿里云服务器带宽不同计费模式下收费价格、费用计算方法及如何选择更合适说明:
538 0
云服务器按固定带宽和按使用流量怎么选?
|
敏捷开发 测试技术 数据库
测试面试题集锦(一)| 软件测试常见必考问题与流程篇(附答案)
![](https://ceshiren.com/uploads/default/original/3X/5/2/524b1c71f55a89ee9afe9e9ad712400cea13dba2.jpeg) 1.测试常见问题与流程篇 2.测试工具篇 3.计算机网络知识篇 4.数据库篇 5.Linux 篇 6.Python 编程篇 7.自动化测试篇:包含 Selenium、Appium 和接口测试
测试面试题集锦(一)| 软件测试常见必考问题与流程篇(附答案)
|
安全 算法 Java
使用CAS实现单点登录
使用CAS实现单点登录
493 0
使用CAS实现单点登录
|
Kubernetes Docker 容器
通过NPD在kubernetes集群上增强节点的错误检测能力
通过部署Node Problem Detector来增强node节点的错误检测能力
6052 0

热门文章

最新文章