【SSO单点系列】(5):CAS4.0 之JDBC

deployerConfigContext.xml

修改对应添加以下代码

 <bean id="SearchModeSearchDatabaseAuthenticationHandler"
         class="org.jasig.cas.adaptors.jdbc.SearchModeSearchDatabaseAuthenticationHandler"
         abstract="false"   lazy-init="default" autowire="default"  >
       <property  name="tableUsers">
           <value>tenant_user</value>
       </property>
       <property name="fieldUser">
           <value>login_name</value>
       </property>
       <property name="fieldPassword">
           <value>login_password</value>
       </property>
       <property name="dataSource" ref="dataSource" />
   </bean>

   <!-- DB2 connector-->
  <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
      <property name="driverClassName">
          <value>com.ibm.db2.jcc.DB2Driver</value>
      </property>
      <property name="url">
          <value>jdbc:db2://127.0.0.1:50000/SAMPLE</value>
      </property>
      <property name="username">
          <value>administrator</value>
      </property>
      <property name="password">
          <value>111111</value>
      </property>
  </bean>

<!-- MySQL connector -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
    <property name="driverClassName">
        <value>com.mysql.jdbc.Driver</value>
    </property>
    <property name="url">
        <value>jdbc:mysql://127.0.0.1:3306/partycloud</value>
    </property>
    <property name="username">
        <value>root</value>
    </property>
    <property name="password">
        <value>root</value>
    </property>
</bean>

修改加密方法

SearchModeSearchDatabaseAuthenticationHandler.java

@Override
protected final HandlerResult authenticateUsernamePasswordInternal(final UsernamePasswordCredential credential)
        throws GeneralSecurityException, PreventedException {
    final Logger logger = LoggerFactory.getLogger(this.getClass());
    final String username = credential.getUsername();
    final String encyptedPassword = getPasswordEncoder().encode(credential.getPassword());
    int count=0;
    try {
        PasswordEncoder passwordEncoder = new DefaultPasswordEncoder("MD5");

        //count = getJdbcTemplate().queryForObject(this.sql, Integer.class, username, encyptedPassword);
        List list=getJdbcTemplate().queryForList("select * from tenant_user t  where login_name=?   ",username  );
        if(list.size()>0){
            HashMap<String,String > map = (HashMap<String, String>) list.get(0);
            String salt=map.get("SALT").toUpperCase();
            String loginPassword=map.get("LOGIN_PASSWORD");
            String md5pass = passwordEncoder.encode( credential.getPassword()).toUpperCase() ;
            String saltpass = passwordEncoder.encode( md5pass+salt ) ;
            logger.info(" MD5:"+saltpass);
            if(saltpass.toUpperCase().equals(loginPassword.toUpperCase())){
                count=1;
            }
        }

    } catch (final DataAccessException e) {
        e.printStackTrace();
        throw new PreventedException("SQL exception while executing query for " + username, e);
    }
    if (count == 0) {
        throw new FailedLoginException(username + " not found with SQL query.");
    }
    return createHandlerResult(credential, new SimplePrincipal(username), null);
}

CAS4.0 之JDBC

deployerConfigContext.xml

 修改对应添加以下代码

<bean id="SearchModeSearchDatabaseAuthenticationHandler"
         class="org.jasig.cas.adaptors.jdbc.SearchModeSearchDatabaseAuthenticationHandler"
         abstract="false"   lazy-init="default"
autowire="default"  >
       <property  name="tableUsers">
           <value>tenant_user</value>
       </property>
       <property name="fieldUser">
           <value>login_name</value>
       </property>
       <property name="fieldPassword">
           <value>login_password</value>
       </property>
       <property name="dataSource" ref="dataSource" />
   </bean>

 


   <!-- DB2 connector-->
 
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
      <property name="driverClassName">
          <value>com.ibm.db2.jcc.DB2Driver</value>
      </property>
      <property name="url">
          <value>jdbc:db2://127.0.0.1:50000/SAMPLE</value>
      </property>
      <property name="username">
          <value>administrator</value>
      </property>
      <property name="password">
          <value>111111</value>
      </property>
  </bean>

<!-- MySQL connector -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
    <property name="driverClassName">
        <value>com.mysql.jdbc.Driver</value>
    </property>
    <property name="url">
        <value>jdbc:mysql://127.0.0.1:3306/partycloud</value>
    </property>
    <property name="username">
        <value>root</value>
    </property>
    <property name="password">
        <value>root</value>
    </property>
</bean>

修改加密方法

SearchModeSearchDatabaseAuthenticationHandler.java

@Override
protected final HandlerResult authenticateUsernamePasswordInternal(final UsernamePasswordCredential credential)
        throws GeneralSecurityException, PreventedException {
    final Logger logger = LoggerFactory.getLogger(this.getClass());
    final String username = credential.getUsername();
    final String encyptedPassword = getPasswordEncoder().encode(credential.getPassword());
    int count=0;
    try {
        PasswordEncoder passwordEncoder = new DefaultPasswordEncoder("MD5");

        //count = getJdbcTemplate().queryForObject(this.sql, Integer.class, username, encyptedPassword);
        List list=getJdbcTemplate().queryForList("select * from tenant_user t  where login_name=?   ",username  );
        if(list.size()>0){
            HashMap<String,String > map = (HashMap<String, String>) list.get(0);
            String salt=map.get("SALT").toUpperCase();
            String loginPassword=map.get("LOGIN_PASSWORD");
            String md5pass = passwordEncoder.encode( credential.getPassword()).toUpperCase() ;
            String saltpass = passwordEncoder.encode( md5pass+salt ) ;
            logger.info(" MD5:"+saltpass);
            if(saltpass.toUpperCase().equals(loginPassword.toUpperCase())){
                count=1;
            }
        }

    } catch (final DataAccessException e) {
        e.printStackTrace();
        throw new PreventedException("SQL exception while executing query for " + username, e);
    }
    if (count == 0) {
        throw new FailedLoginException(username + " not found with SQL query.");
    }
    return createHandlerResult(credential, new SimplePrincipal(username), null);
}
时间: 2024-11-07 20:41:35

【SSO单点系列】(5):CAS4.0 之JDBC的相关文章

【SSO单点系列】(1):CAS4.0 之环境的搭建

[SSO单点系列](1):CAS4.0 环境的搭建 一.概述 今天开始写CAS相关的第一篇文章,这篇文章主要是关于CAS环境的搭配,提供给刚刚接触CAS的一个入门指南,并演示一个CAS的最简单的实例 二.环境要求 博主的环境如下: win8.1 64 bit JDK1.7  下载地址点我 Tomcat-8.0.15  下载地址点我 cas-server-4.0.0 .cas-client-3.3.3  下载地址点我  (官网速度比较慢,提供百度网盘) tomcat服务器需要部署三个,我分别命名为

【SSO单点系列】(2):CAS登录页的个性化定制

上一篇 [SSO单点系列](1):CAS环境的搭建介绍了CAS最简单环境的搭建,以及一个例子用来讲解CAS的一个最基础的用法. 今天主要是介绍如何对CAS登录页进行个性化定制.    一.开始 下图是CAS默认的登录界面,可以看到这界面是肯定不能直接用在生产环境上的,因为上面的有许多英文,简单来说,这是一个对客户非常不友好的界面.那么怎么修改它呢?我们接着往下看! ps:这个页面在工程中的地址为 cas\WEB-INF\view\jsp\default\ui\casLoginView.jsp,大

spring cloud云架构 - SSO单点登录之OAuth2.0 根据token获取用户信息(4)

上一篇我根据框架中OAuth2.0的使用总结,画了SSO单点登录之OAuth2.0 登出流程,今天我们看一下根据用户token获取yoghurt信息的流程: Java代码   /** * 根据token获取用户信息 * @param accessToken * @return * @throws Exception */ @RequestMapping(value = "/user/token/{accesstoken}", method = RequestMethod.GET) pu

Spring Cloud云架构 SSO单点登录之OAuth2.0 根据token获取用户信息(4)

上一篇我根据框架中OAuth2.0的使用总结,画了SSO单点登录之OAuth2.0 登出流程,今天我们看一下根据用户token获取yoghurt信息的流程: /** * 根据token获取用户信息 * @param accessToken * @return * @throws Exception */ @RequestMapping(value = "/user/token/{accesstoken}", method = RequestMethod.GET) public Resp

SSO单点登录之OAuth2.0 根据token获取用户信息(4)

上一篇我根据框架中OAuth2.0的使用总结,画了SSO单点登录之OAuth2.0 登出流程,今天我们看一下根据用户token获取yoghurt信息的流程: /** * 根据token获取用户信息 * @param accessToken * @return * @throws Exception */ @RequestMapping(value = "/user/token/{accesstoken}", method = RequestMethod.GET) public Resp

整合spring cloud云架构 - SSO单点登录之OAuth2.0 根据token获取用户信息

上一篇我根据框架中OAuth2.0的使用总结,画了SSO单点登录之OAuth2.0 登出流程,今天我们看一下根据用户token获取yoghurt信息的流程: /** * 根据token获取用户信息 * @param accessToken * @return * @throws Exception */ @RequestMapping(value = "/user/token/{accesstoken}", method = RequestMethod.GET) public Resp

(十三)Java springcloud B2B2C o2o多用户商城 springcloud架构 - SSO单点登录之OAuth2.0 根据token获取用户信息(4)

上一篇我根据框架中OAuth2.0的使用总结,画了SSO单点登录之OAuth2.0 登出流程,今天我们看一下根据用户token获取yoghurt信息的流程: /** * 根据token获取用户信息 * @param accessToken * @return * @throws Exception */ @RequestMapping(value = "/user/token/{accesstoken}", method = RequestMethod.GET) public Resp

(十三) 整合spring cloud云架构 - SSO单点登录之OAuth2.0 根据token获取用户信息(4)

上一篇我根据框架中OAuth2.0的使用总结,画了SSO单点登录之OAuth2.0 登出流程,今天我们看一下根据用户token获取yoghurt信息的流程: /** * 根据token获取用户信息 * @param accessToken * @return * @throws Exception */ @RequestMapping(value = "/user/token/{accesstoken}", method = RequestMethod.GET) public Resp

【SSO单点系列】(7):CAS4.0 二级域名

CAS4.0 二级域名 一.描述 当cas成功登录后如果访问同一域名下的资源是 被当作同一应用下资源不需要再次请求登录,但是如果二级域名不同会 被当作不同应用在访问 需要请求CAS 在请求时会把TGC传给CAS  CAS验证TGC有效返回资源页面 本身是没有问题的  但是在返回时地址 会被重写 就不再是新生成的二级域名了 所以项目中无法区分二级域名了 二.思路 在登录成功后就自己写入session不用原来的域名 三.实现 AuthenticationFilter.java 方法 doFilter