使用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服务器中:
- 停止Tomcat当前服务;
- 将这些*.jar上传到Linux目录下;
- 将所有的*.jar移动到cas项目里面:
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
- 4.1数据源配置
<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&characterEncoding=UTF-8"></property>
<property name="user" value="root"></property>
<property name="password" value="root"></property>
</bean>
- 4.2 增加数据库检测认证器
<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>
- 4.3 修改认证授权
原始数据:<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配置文件,引入刚刚定义的密码类的操作
- 4.1 先定义密码加密处理的bean声明:
<bean id="passwordEncoder" class="cn.myproject.util.encoder.CustomPasswordEncoder">
- 4.2 修改定义好的数据库认证配置:这里一定要给出“passwordEncoder”这个属性
<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
- 停止当前的Tomcat服务
- 启动服务
网友评论