`
zqb666kkk
  • 浏览: 732622 次
  • 性别: 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 插件版本...

    Apereo CAS5.2.3 自定义登录页,验证码,扩展开发,注册功能

    完整项目在https://download.csdn.net/download/u010588262/10327539 这个资源是新增功能之后的main文件夹 对应博客系列:https://blog.csdn.net/u010588262/article/category/7548325 对应博客这篇:...

    CAS单点登录配置

    单点登录是指用户在一个应用系统中登录后,可以在其他所有相互信任的应用系统中自动登录,而不需要再次输入凭证。这减少了用户的记忆负担,同时也提高了安全性,因为用户只需记住一套登录信息。 配置CAS单点登录...

    cas客户端集成单点登录代码3

    客户端在成功登录后,会将TGT存储在用户的浏览器中,以便后续的自动登录。而Session是客户端应用中的用户会话,需要与TGT同步管理,确保登出操作的正确执行。 7. 安全考虑:在集成CAS过程中,必须考虑安全问题,如...

    CAS单点登录实例

    8. **单点登出(Single Sign-Out,SSO)**:除了单点登录,CAS还提供了单点登出功能,允许用户在一处登出后,自动从所有已登录的应用中注销。 9. **自定义扩展**:CAS设计为高度可扩展,允许开发人员根据需求定制...

    cas单点登录server端代码

    - 服务注册:每个需要SSO保护的应用都应注册到CAS Server,提供应用的回调URL,以便CAS能正确验证ST。 6. 博文参考: 提供的博文链接可能详细解释了如何设置和使用这个CAS Server实例,包括可能出现的问题和解决...

    SSO之CAS单点登录

    - **Ticket Granting Cookie (TGC)**: 当用户在CAS上登录后,CAS会发送一个TGC给浏览器,后续请求中,TGC用于验证用户身份,避免频繁的身份验证请求。 **安全考量** - **SSL/TLS**: 所有与CAS服务器的通信应使用...

    cas.rar_CAS_cas linux _单点登录

    3. **处理登录和登出**:客户端库会处理用户的登录请求,当用户访问受保护资源时,会自动重定向到CAS服务器进行登录。登录成功后,CAS会返回票据,客户端验证票据并创建会话。登出时,客户端会引导用户至CAS服务器...

    cas单点登录 server端,运行成功

    2. **测试登录流程**:尝试通过CAS服务器登录,然后访问受保护的应用,检查是否能自动登录。 3. **测试登出功能**:确保从一个应用登出后,所有已登录的应用都同时注销。 在试运行过程中,应密切关注日志,查找可能...

    基于java语言开发的cas单点登录系统

    **基于Java语言开发的CAS单点登录系统** CAS(Central Authentication Service)是一种广泛使用的开源单点登录(Single Sign-On,SSO)框架,主要由耶鲁大学开发并维护。它旨在提供一种简单、安全的方式,使得用户...

    CAS单点登录

    3. **Ticket Granting Ticket (TGT)**:在用户成功登录CAS Server后,服务器会生成一个TGT,存储用户的身份信息。 4. **Service Ticket (ST)**:当用户访问某个应用时,CAS Client会携带TGT向CAS Server申请特定应用...

    springboot+security+cas集成demo

    3. **定义Service Provider**:在CAS服务器上,为Spring Boot应用注册为服务提供者,定义服务ID和服务URL,以便CAS能识别并处理来自该应用的请求。 4. **处理认证和授权**:当用户访问受保护的资源时,Spring ...

    cas单点登录

    - 登录重定向:当用户试图访问受保护资源时,客户端库会自动将他们重定向到CAS服务器的登录页面。 - 票据验证:客户端库负责处理从CAS服务器接收的服务票据,并向服务器发送验证请求。 - SSO会话管理:客户端库维护...

    cas spnego认证方式(即加ad域的windows主机应用免登录)高可用集群方案(目前来看国内第一份资料,本人探索出来的)

    在CAS + AD域的环境下,SPNEGO认证使得用户在登录Windows系统后无需再次输入密码即可访问应用,极大地提升了用户体验。 ##### 2.2 CAS集群基础架构 传统的CAS集群架构主要包括两大部分:Session共享与Ticket共享。...

    Jeecg配置单点登录 登录验证完整代码

    4. **处理登录与登出逻辑**:配置完成后,Jeecg应用会自动重定向到CAS登录页面进行身份验证。验证成功后,CAS服务器会向Jeecg应用返回一个服务票证(ST),Jeecg应用通过这个票证向CAS服务器验证用户身份,然后创建...

    cas-server-3.5.1和cas-client-3.2.1

    单点登录允许用户在一个应用系统中登录后,无须再次登录就能访问其他已注册的系统。这样既提高了用户体验,又简化了身份验证过程,降低了安全管理的复杂性。 在实际部署和使用过程中,你需要理解CAS的工作原理,...

Global site tag (gtag.js) - Google Analytics