`
zqb666kkk
  • 浏览: 726412 次
  • 性别: Icon_minigender_1
  • 来自: 宁波
社区版块
存档分类
最新评论

cas 注册后自动登录

    博客分类:
  • cas
阅读更多
我用的 cas server 4.0.1 cas client 3.3.3
算是版本比较新的了 网上的demo是cas 3.x的 比较老
参考博客 :http://binghejinjun.iteye.com/blog/1701688

下面说说具体实现步骤:
在cas server端

建立
package io.github.howiefh.cas.web.flow;

import java.io.IOException;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.jasig.cas.CentralAuthenticationService;
//import org.jasig.cas.authentication.principal.UsernamePasswordCredentials;
import org.jasig.cas.authentication.UsernamePasswordCredential;
import org.jasig.cas.ticket.TicketException;
import org.jasig.cas.web.support.CookieRetrievingCookieGenerator;
import org.springframework.web.bind.ServletRequestUtils;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.AbstractController;

import sun.misc.BASE64Decoder;

/**
 * 
 * 
 * 功能:注册后自动登录处理类
 * 
 * @ClassName: RegisterAfterLoginController 
 * @version V1.0  
 * @date 2016年7月5日 
 * @author [url=mailto:6637152@qq.com]zqb[/url]
 */
public class RegisterAfterLoginController extends AbstractController
{

    private CentralAuthenticationService centralAuthenticationService;
    private CookieRetrievingCookieGenerator  ticketGrantingTicketCookieGenerator;
    
    /**
     * 
     * 
     * 功能:获取用户名密码,验证有效性,生成相关票据并绑定注册,添加cookie
     * 
     * @author [url=mailto:engineer03@financegt.com]zqb[/url]
     * @date 2016年7月5日 
     * @param request
     * @param response
     * @return
     * @throws Exception 
     * @see org.springframework.web.servlet.mvc.AbstractController#handleRequestInternal(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
     */
    protected ModelAndView handleRequestInternal(HttpServletRequest request,
            HttpServletResponse response) throws Exception
    {
        ModelAndView signinView=new ModelAndView();
        String username=request.getParameter("username");
        String password=request.getParameter("password");
        
        try {
        	username = new String(new BASE64Decoder().decodeBuffer(username));	//解密后
		} catch (IOException e) {
			e.printStackTrace();
		}
        try {
        	password = new String(new BASE64Decoder().decodeBuffer(password));
		} catch (IOException e) {
			e.printStackTrace();
		}
        
        System.out.println("解密后的账号:"+username);
        System.out.println("解密后的密码:"+password);
//        username = EncryptUrlPara.decrypt("username",username);
//        password = EncryptUrlPara.decrypt("password",password);

        bindTicketGrantingTicket(username, password, request, response);
        String viewName=getSignInView(request);
        signinView.setViewName(viewName);
        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.
     */
    /**
     * 
     * 
     * 功能:具体生成相关票据并绑定注册,添加cookie实现方法
     * 
     * @author [url=mailto:engineer03@financegt.com]zqb[/url]
     * @date 2016年7月5日 
     * @param loginName
     * @param loginPassword
     * @param request
     * @param response
     */
    protected void bindTicketGrantingTicket(String loginName, String loginPassword, HttpServletRequest request, HttpServletResponse response){
        try {
            //UsernamePasswordCredentials credentials = new UsernamePasswordCredentials();	//4.0之前
        	UsernamePasswordCredential credentials = new UsernamePasswordCredential();
            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.获取service参数并跳转页面
     * @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 : ""));
    }


    public CentralAuthenticationService getCentralAuthenticationService()
    {
        return centralAuthenticationService;
    }


    public void setCentralAuthenticationService(
            CentralAuthenticationService centralAuthenticationService)
    {
        this.centralAuthenticationService = centralAuthenticationService;
    }


    public CookieRetrievingCookieGenerator getTicketGrantingTicketCookieGenerator()
    {
        return ticketGrantingTicketCookieGenerator;
    }


    public void setTicketGrantingTicketCookieGenerator(
            CookieRetrievingCookieGenerator ticketGrantingTicketCookieGenerator)
    {
        this.ticketGrantingTicketCookieGenerator = ticketGrantingTicketCookieGenerator;
    }


    
    
    
}


cas-servlet.xml
      <bean id="registerLoginController" class="io.github.howiefh.cas.web.flow.RegisterAfterLoginController" 
  p:centralAuthenticationService-ref="centralAuthenticationService"
  p:ticketGrantingTicketCookieGenerator-ref="ticketGrantingTicketCookieGenerator"/>

web.xml

  <servlet-mapping>
          <servlet-name>cas</servlet-name>
          <url-pattern>/registerLogin</url-pattern>
       </servlet-mapping>


-------------------------------------------------------------
cas 客户端项目 的配置实现


在注册成功提示页面直接 访问
window.location.href="https://casserver.com:8443/cas-server/registerLogin?username=${param.usernamestr}&password=${param.passwordstr}&service=http://localhost:9080/casclient/";(这里貌似后面必须加个/不然会提示地址不一致)
记得在 casServerUrlPrefix配置下面加个
 <!-- 去掉ticket重复验证 -->
   <init-param>  
          <param-name>redirectAfterValidation</param-name>  
          <param-value>true</param-value>  
       </init-param>  
  <init-param>

不然会无限次的 进cas server 的 验证
具体可以百度下这个配置的作用


客户端这个传输账号密码做了加密
String username = account.getEmail();
				
				String username_ret = null;
				username_ret = new BASE64Encoder().encode(username.getBytes()); // 加密后

				String password_ret = null;
				password_ret = new BASE64Encoder().encode(password_tocas.getBytes()); // 加密后

				attr.addAttribute("usernamestr", username_ret);
				attr.addAttribute("passwordstr", password_ret);


用了 sun.misc.BASE64Encoder

这样就搞定了 !


0
2
分享到:
评论
3 楼 wj_gl 2018-03-23  
在cas-servlet.xml中的配置
2 楼 wj_gl 2018-03-23  
少了一个配置吧:

<bean id="handlerMappingC"
class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"
p:alwaysUseFullPath="true">
<property name="mappings">
<util:properties>
<prop key="/registerLogin">registerLoginController</prop>
</util:properties>
</property>
<!-- uncomment this to enable sending PageRequest events. <property name="interceptors">
<list> <ref bean="pageRequestHandlerInterceptorAdapter" /> </list> </property> -->
</bean>
1 楼 ganbo 2016-12-16  
哥们,cas跨域的域名怎么单点登录啊! 比如A网站:www.aaa.com,  B网站www.aaa.cn 这种实现单点登录,等。

相关推荐

    CAS单点登录用户注册后自动登录

    NULL 博文链接:https://binghejinjun.iteye.com/blog/1701688

    禅道开源版集成CAS单点登录

    本文在已有的禅道集成CAS单点登录的客户端插件基础上进行的修改,因原有插件在我们的系统上调试无法成功,做了一些定制,环境如下: 1. CAS server 版本:4.0.0 2. 禅道开源版本: 9.6.3 3. 禅道CAS client 插件版本...

    spring in action英文版

     11.2.4 基于Acegi和Yale CAS实现单次登录  11.3 控制访问  11.3.1 访问决策投票  11.3.2 决定如何投票  11.3.3 处理投票弃权  11.4 保护Web应用程序  11.4.1 代理Acegi的过滤器  11.4.2 ...

    Android采取BroadcastReceiver方式自动获取验证码

    Android 自动获取验证码的两种方式分别是BroadcastReceiver及ContentObserver,两种方式都需要进行注册、取消注册两个步骤 记得添加权限,本文先介绍其中一种。 ”android.permission.RECEIVE_SMS”/&gt; ”android....

    黑马品优购项目

    单点登录:cas 权限管理:SpringSecurity, 跨域:cros 支付:微信扫描 短信验证:阿里大于 密码加密:BCrypt 富文本:KindEditor 事务:声明式事务 任务调度:spring task 所有的技术,都可能涉及到为什么用?怎么...

    全新JAVAEE大神完美就业实战课程 超150G巨制课程轻松实战JAVAEE课程 就业部分.txt

    15单点登录解决方案CAS 16购物车解决方案 17跨域解决方案与提交订单 18微信扫码支付 19秒杀解决方案 20品优购系统业务分析 1集群概述 2Zookeeper集群 2品优购电商系统部署 3SolrCloud集群 4Redis...

    Android BroadcastReceiver实现网络状态实时监听

    前言:最近公司项目重构,为了提高用户的体验,项目中要求添加当前网络状态的实时监听,...(2)静态注册:在清单文件的application节点下通过标签声明,系统首次启动时会自动注册。 效果图: 1.定义网络状态监听接口

    使用 iAMA 改进学术咨询系统-研究论文

    iAMA 的主题单元是:根据学生水平提供学生计划图的计划图单元,利用遗传算法促进经验学生分数自动发现的智能分数推定单元以及该单元将估计需要根据学生的 GPA 获得的分数、显示所有以前通过和失败的注册课程成绩的...

    云服务器数据安全保护软件项目询价文件.doc

    自动防堵发现到的最新漏洞, " " "在漏洞修复后及时取消虚拟补丁的应用,无须重启服务 " " "器即可完成。 " "日志审查 "提供日志审查功能,收集和分析操作系统和应用程序日 " " "志中的安全事件,将事件转至SIEM系统...

    计算机应用技术(实用手册)

    开启计算机或重新启动计算机后,听见自检通过的声音后,按 “Del”键就可以进入CMOS的设置界面;要注意的是,如果按得太晚,计算机将会启动系统,这时只有重新启动计算机了。大家可在开机后立刻按DEL键直到进入CMOS...

    电脑系统优化大全

    以Windows优化大师,点击“注册信息清理”→“扫描”(如图1),软件就会自动替你清扫注册表中的垃圾,在扫描结束后,会弹出个菜单让你选择是否备份注册表,建议选择备份,备份后再点击“清除”即可。  六、经常...

    JAVA上百实例源码以及开源项目

     用JAVA开发的一个小型的目录监视系统,系统会每5秒自动扫描一次需要监视的目录,可以用来监视目录中文件大小及文件增减数目的变化。 Java日期选择控件完整源代码 14个目标文件 内容索引:JAVA源码,系统相关,日历,...

    JAVA上百实例源码以及开源项目源代码

     用JAVA开发的一个小型的目录监视系统,系统会每5秒自动扫描一次需要监视的目录,可以用来监视目录中文件大小及文件增减数目的变化。 Java日期选择控件完整源代码 14个目标文件 内容索引:JAVA源码,系统相关,日历,...

    java开源包1

    JOpenID是一个轻量级的OpenID 2.0 Java客户端,仅50KB+(含源代码),允许任何Web网站通过OpenID支持用户直接登录而无需注册,例如Google Account或Yahoo Account。 JActor的文件持久化组件 JFile JFile 是 JActor ...

    java开源包11

    JOpenID是一个轻量级的OpenID 2.0 Java客户端,仅50KB+(含源代码),允许任何Web网站通过OpenID支持用户直接登录而无需注册,例如Google Account或Yahoo Account。 JActor的文件持久化组件 JFile JFile 是 JActor ...

    java开源包2

    JOpenID是一个轻量级的OpenID 2.0 Java客户端,仅50KB+(含源代码),允许任何Web网站通过OpenID支持用户直接登录而无需注册,例如Google Account或Yahoo Account。 JActor的文件持久化组件 JFile JFile 是 JActor ...

    java开源包3

    JOpenID是一个轻量级的OpenID 2.0 Java客户端,仅50KB+(含源代码),允许任何Web网站通过OpenID支持用户直接登录而无需注册,例如Google Account或Yahoo Account。 JActor的文件持久化组件 JFile JFile 是 JActor ...

    java开源包6

    JOpenID是一个轻量级的OpenID 2.0 Java客户端,仅50KB+(含源代码),允许任何Web网站通过OpenID支持用户直接登录而无需注册,例如Google Account或Yahoo Account。 JActor的文件持久化组件 JFile JFile 是 JActor ...

    java开源包5

    JOpenID是一个轻量级的OpenID 2.0 Java客户端,仅50KB+(含源代码),允许任何Web网站通过OpenID支持用户直接登录而无需注册,例如Google Account或Yahoo Account。 JActor的文件持久化组件 JFile JFile 是 JActor ...

Global site tag (gtag.js) - Google Analytics