cas de sesión único de aprendizaje (II) autentica la base de datos
archivo POM
Agregue el paquete de base de datos de autenticación necesarios
estoy usando MySQL, MySQL por lo que añadir el paquete de controladores
<dependencies>
<!-- cas database 认证支持-->
<dependency>
<groupId>org.apereo.cas</groupId>
<artifactId>cas-server-support-jdbc</artifactId>
<version>${cas.version}</version>
</dependency>
<!--mysql driver-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.25</version>
</dependency>
</dependencies>
yaml
#SSL配置 证书
server:
ssl:
enabled: true
key-store: classpath:thekeystore
key-store-password: changeit
key-password: changeit
cas:
authn:
jdbc:
query:
#数据库连接
- url: jdbc:mysql://127.0.0.1:3306/blog_cas?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&useSSL
=false
# 用户名
user: blog-cas
# 密码
password: blog-cas
# 方言
dialect: org.hibernate.dialect.MySQLDialect
# 数据库驱动
driverClass: com.mysql.jdbc.Driver
# idleTimeout: 5000
#查询账号密码SQL,必须包含密码字段
sql: select username,password from user where username=?
# 指定密码字段
fieldPassword: password
Crear una tabla en la base de datos de usuario
reenvasado después de su lanzamiento, puede utilizar el usuario a / 1 de sesión
encriptación MD5
md5 se puede calcular como una longitud de texto claro contraseña fija (32) de la cadena, la irreversible
cas:
authn:
jdbc:
query:
- passwordEncoder:
type: DEFAULT
encodingAlgorithm: MD5
md5 valor de la consulta mysql de 1, la copia en la tabla de usuarios
seleccionar md5 ( '1')
sal cifrado MD5
cas web oficial explicó base de datos Codificar autenticación
cifrado valor MD5 MD5 no es particularmente seguro, dos contraseñas en texto plano idénticos son la misma solución, el cifrado de sal a este problema, incluso con la misma contraseña en texto plano, puede tener diferente valor de la contraseña, se puede lograr una persona una contraseña .
Después de sales de adición de contraseña cifrada a las sales privadas y públicas sales MD5 valor calculado, de modo que una persona para lograr una contraseña
YML
# 盐加密
cas:
authn:
jdbc:
encode:
# jdbc
- url: jdbc:mysql://127.0.0.1:3306/blog_cas?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&useSSL=false
# 驱动
driverClass: com.mysql.jdbc.Driver
# 方言
dialect: org.hibernate.dialect.MySQL5Dialect
# 数据库用户名
user: blog-cas
# 数据库密码
password: blog-cas
# 加密方式
algorithmName: MD5
# 加密迭代次数
numberOfIterations: 2
# 密码字段
passwordFieldName: password
# 动态盐值
saltFieldName: username
# 静态盐值
staticSalt: 123
sql: SELECT username,password FROM user WHERE username =?
Generar el valor sal
paquete requerido
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-core</artifactId>
<version>1.4.0</version>
<!-- <scope>test</scope>-->
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
package jsong;
import org.apache.shiro.crypto.hash.ConfigurableHashService;
import org.apache.shiro.crypto.hash.DefaultHashService;
import org.apache.shiro.crypto.hash.HashRequest;
import org.apache.shiro.util.ByteSource;
import org.junit.Test;
public class CreateSaltPassword {
// 静态盐值
private String staticSalt = "123";
// 加密算法
private String algorithmName = "MD5";
// 密码
private String encodedPassword = "1";
// 用户名 动态盐值
private String dynaSalt = "test";
// 加密迭代次数
private int numberOfIterations = 2;
@Test
public void test() throws Exception {
ConfigurableHashService hashService = new DefaultHashService();
hashService.setPrivateSalt(ByteSource.Util.bytes(this.staticSalt));
hashService.setHashAlgorithmName(this.algorithmName);
hashService.setHashIterations(this.numberOfIterations);
HashRequest request = new HashRequest.Builder()
.setSalt(dynaSalt)
.setSource(encodedPassword)
.build();
String res = hashService.computeHash(request).toHex();
System.out.println(res);
}
}
La existencia de la base de datos y el valor de sal generada prueba de nombre de usuario, porque el nombre de usuario, la contraseña, incluso si los mismos, diferentes usuarios tendrán diferentes sales valores
utilizando la prueba / 1 usuario puede iniciar sesión