12. 使用mysql验证用户名和密码

2019-08-22  本文已影响0人  不知名的蛋挞

使用mysql验证用户名和密码

本次的验证将采用不加密密码模式来完成。本次需要用到如下两台服务器:

NO 主机名称 IP地址 用途描述
1 cas-server 192.168.198.203 Tomcat、CAS
2 cas-mysql 192.168.198.204 MySQL

1. 【cas-mysql】启动mysql服务

nohup mysql_safe --user=root >/dev/null 2>& 1 &

2. 【cas-mysql】执行数据库脚本,创建用户表,导入测试数据(可以用Navicat操作)

一定要记住,此时的密码并没有使用MD5进行加密处理。

3. 【cas-server】cas服务器连接mysql数据库

此时的cas服务器需要进行mysql数据库的连接,所以将c3p0、mysql-jdbc、mchange-commons-java、cas-server-support-jdbc组件包上传到Tomcat服务器中:

mv /srv/ftp/*.jar /usr/local/tomcat/webapps/cas/WEB-INF/lib

4.【cas-server】修改cas配置文件

vim  /usr/local/tomcat/webapps/cas/WEB-INF/deployerConfigContext.xml
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
    <property name="driverClass" value="com.mysql.jdbc.Driver"></property>
    <property name="jdbcUrl" value="jdbc:mysql://127.0.0.1:3306/cas?useUnicode=true&amp;characterEncoding=UTF-8"></property>
    <property name="user" value="root"></property>
    <property name="password" value="root"></property>
  </bean>
<bean id="doAuthHandler" class="org.jasig.cas.adaptors.jdbc.QueryDatabaseAuthenticationHandler">
    <property name="dataSource" ref="dataSource" />
    <property name="sql" value="select password from member where mid=? AND locked=0" />
</bean>
原始数据:<entry key-ref="primaryAuthenticationHandler" value-ref="primaryPrincipalResolver" />
新配置项:<entry key-ref="doAuthHandler" value-ref="primaryPrincipalResolver" />

5. 【cas-server】启动Tomcat服务

打开浏览器进入cas认证界面进行测试:

在CAS中使用MD5加密

之前给出的数据库密码都属于明文的显示,很明显这样的显示不适合于我们的开发,所以在实际的工作之中应该使用密文进行处理。那么本次将采用MD5+盐值的模式来实现密码的加密处理操作。本次加密的时候采用盐值的处理,盐值使用Base64来处理。

public class TestBase64 {

    public static void main(String[] args){
        String str = "saltjava";
        System.out.println(new String(Base64.getEncoder().encode(str.getBytes())));
    }
}

得到盐值:bWxkbmphdmE=,随后一定要使用MD5进行加密处理,但是这个加密处理采用加密3次的模式完成。

public class TestPassword {
    public static void main(String[] args){
        String salt = "bWxkbmphdmE=";
        String password = "hello";
        String newpassword = password+"{{"+salt+"}}";
        for(int i=0;i<3;i++){
            newpassword = new MD5Code().getMD5ofStr(newpassword);
        }
        System.out.println(newpassword);
    }
}

那么之后就可以得到加密后的数据库脚本内容:

随后就需要进行具体的MD5的加密的验证处理了,此时需要修改cas服务器的配置。

1. 需要为CAS做一个新的密码加密器

CAS的密码加密器有自己的一个专属实现类,而这个实现类在“cas-server-core-api-4.1.7.jar”包里面。

// 此PasswordEncoder为CAS软件包提供,必须进行严格的实现
public class CustomPasswordEncoder implements PasswordEncoder{

    @Override
    public String encode(String password){
        String salt = "bWxkbmphdmE=";
        String newpassword = password+"{{"+salt+"}}";
        for(int i=0;i<3;i++){
            newpassword = new MD5Code().getMD5ofStr(newpassword);
        }
        System.out.println(newpassword);
    }
}

2. 随后将此开发包进行打包编译处理,打包编译的包名为“md5-code.jar”

3. 将导出的“md5-code.jar”文件上传到Linux系统,随后将其移动到cas/WEB-INF/lib目录下

4. 随后需要编辑deployerConfigContext.xml配置文件,引入刚刚定义的密码类的操作

<bean id="passwordEncoder" class="cn.myproject.util.encoder.CustomPasswordEncoder">
<bean id="doAuthHandler" class="org.jasig.cas.adaptors.jdbc.QueryDatabaseAuthenticationHandler">
    <property name="passwordEncoder" ref="passwordEncoder" />
    <property name="dataSource" ref="dataSource" />
    <property name="sql" value="select password from member where mid=? AND locked=0" />
</bean>

5. 重新启动Tomcat

上一篇下一篇

猜你喜欢

热点阅读