【转】cas注册后自动登录

  本文转自: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中 

时间: 2024-09-24 11:36:22

【转】cas注册后自动登录的相关文章

spring security cas整合如何实现注册后自动登录

问题描述 spring security cas整合如何实现注册后自动登录 spring security cas整合如何实现注册后自动登录,哪位高手有样例代码,万分感谢 解决方案 CAS 之 实现用户注册后自动登录

edittext-android想实现注册后返回登录界面自动填写刚刚的账号密码信息

问题描述 android想实现注册后返回登录界面自动填写刚刚的账号密码信息 代码如下 值传过来了 但是赋值不成功 protected void onActivityResult(int requestCode, int resultCode, Intent data) { // TODO Auto-generated method stub super.onActivityResult(requestCode, resultCode, data); Toast.makeText(getAppli

Windows系统重启后自动登录运行指定的windows程序

网络管理员在维护系统过程中,经常遇到计算机或服务器意外重新启动,这个时候运行在 服务器上的程序会因为重新启动导致程序无法运行,比如摄像头监控程序,等发现服务器等 待你输入用户名和密码的时候,监控程序已经好长时间没有运行了.如何让关键程序在服务 器重新启动后自动登录并且自动运行程序后锁定计算机. 按一下步骤可以实现以上的 功能: (一).计算机重新启动后自动登录系统 您可以使用注册表编辑器添 加您的登录信息.为此,请按照以下步骤操作: 1. 单击「开始」,单击"运行", 键入 reged

java实现扫描条码上的工号后自动登录如何实现?

问题描述 我以前没有接触过条码扫描,本人现在在做一个系统,现在有个功能是用条码扫描枪扫描条码后就登录成功,想知道是怎么实现的?是不是还有写什么接口?还需要什么开发包吗? 解决方案 解决方案二:帮顶吧解决方案三:这个不就简单吗,一个程序专门用来获取设备扫描过来的数据,获取数据之后进行查询比对,找到之后进行自动登录.呵呵~~可能我理解有误?

win7用户账户自动登录方法汇总

为了计算机安全,相信使用Windows7系统的朋友大多都为自己的用户账户设置了或简单或复杂的密码,其实对于个人电脑来说,开机登录输入密码有时候会显得累赘,毕竟用户账户密码不仅仅是为了防止他人登录.那么有没有方法既设置了用户密码又可以省掉登录输入密码这一步骤呢?今天就为大家简单介绍几种方法. 第一,魔方在手,优化不愁 打开魔方优化大师,找到优化设置大师,依次"用户管理","用户登录管理"功能. 勾选"以下列账号自动登录"功能,键入需要自动登录的用户

win8系统登陆qq后不自动登录宠物的方法介绍

  1.登陆qq; 2.发现qq宠物竟然自动登陆了,对于不需要的人很麻烦; 3.点击设置; 4.在登陆设置里看到登陆时自动运行qq宠物; 5.点击取消; 6.重启qq后,就不会再自动登陆了. 以上就是小编带来的win8系统登陆qq后不自动登录宠物的方法介绍,希望能够帮助到大家!

setopt-用php的curl模拟登录后自动跳转问题

问题描述 用php的curl模拟登录后自动跳转问题 我在使用curl模拟登陆时,模拟登录成功了,但是成功之后总是会自动跳转到另一个页面,请问我怎样才能使它不自动跳转呢? $url = "http://class.sise.com.cn:7001/sise/login_check.jsp"; // 设置cookie保存路径 $cookie = dirname(__FILE__) . '/cookie_student.txt'; $curl = curl_init();//初始化curl模

我的docker安装ssh后,登录上就自动退出了什么情况 [root@10-10-44-63 /]# ssh 127.0.0.1 -p 222 root@127

问题描述 我的docker安装ssh后,登录上就自动退出了什么情况[root@10-10-44-63/]#ssh127.0.0.1-p222root@127.0.0.1'spassword:Lastlogin:WedNov2608:08:132014from101.231.40.186Connectionto127.0.0.1closed.该问题来自CSDNDocker技术交流群(303806405),由版主xinshubiao整理.

Session过期后自动跳转到登录页面的实例代码_java

最近做了一个项目其中有需求,要实现自动登录功能,通过查阅相关资料,打算用session监听来做,下面给大家列出了配置监听器的方法: 1.在项目的web.xml文件中添加如下代码: <!--添加Session监听器--> <listener> <listener-class> 监听器路径 </listener-class> </listener> 2.编写java类. public class SessionListener implements