CZTZ-JavaEE Web应用开发平台介绍之四--与CAS单点登录集成

CZTZ -JavaEE Web应用开发平台与CAS的单点登录产品进行了集成, CAS单点登录产品的默认的认证类是SimpleTestUsernamePasswordAuthenticationHandler,这个类的实现是当用户名和口令相等时认证通过,所以这个类肯定不能在生产环境使用的,现在需要将此类替换掉,实现一个基于数据库访问的认证方式.本文讲述如何实现这个类(数据源在tomcat中如何配置从略,我想大家都知道配置方式).

    在CAS的WEB-INF目录下有个deployerConfigContext.xml文件,将<bean
     class="org.jasig.cas.authentication.handler.support.SimpleTestUsernamePasswordAuthenticationHandler" />改为

<bean
     class="org.jasig.cas.authentication.handler.support.CasDaoAuthenticationHandler" />

其中CasDaoAuthenticationHandler是我自己开发的实现类,代码如下:

package org.jasig.cas.authentication.handler.support;

import java.sql.Connection;
import java.sql.ResultSet;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.sql.DataSource;
 
import org.jasig.cas.authentication.principal.UsernamePasswordCredentials;

public final class CasDaoAuthenticationHandler extends AbstractUsernamePasswordAuthenticationHandler
{
    public CasDaoAuthenticationHandler()
     {
     }

     public boolean authenticateUsernamePasswordInternal(UsernamePasswordCredentials credentials)
     {
      boolean bool = false;
         String username = credentials.getUsername();
         String password = credentials.getPassword();
         System.out.println("开始CAS认证......");
            System.out.println("userName:"+username);
            System.out.println("password:"+password);
         //首先连接权限数据库
         try
         {
          DataSource ds = null;
             InitialContext ctx=new InitialContext();
             Context contx = (Context)ctx.lookup("java:comp/env");
             ds = (DataSource) contx.lookup("jdbc/mysql");
             Connection con =  ds.getConnection();
             if(con == null)
             System.out.println("con is null");

             String sql  = "select count(*)  from eas_login_user where  user_id='"+username+"' and user_password='"+password+"'";
             ResultSet res = con.prepareStatement(sql).executeQuery();
             while(res.next())
             {
              int i = Integer.parseInt(res.getObject(1).toString());
              if(i>0)
              {
               System.out.println("认证成功!");
               bool = true;
               break;
              }
             }
            con.close();
         }
         catch(Exception ex)
         {
          ex.printStackTrace();
          System.out.println("数据库连接失败!");
          return bool;
         }
        
         return bool;
     }

     protected void afterPropertiesSetInternal()
         throws Exception
     {
         super.afterPropertiesSetInternal();
     }

}

上面的代码是取CAS登录页面的用户名和口令到数据库检验是否存在用户名和口令相同的记录,当然在生产环境中

用户口令是加密存储的,所以实际应用中增加一个加密算法就可以了.

 

欢迎大家继续关注CZTZ-JavaEE Web应用开发平台!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值