MD5工具类
public class MyMD5Util {
public static String md5(String password) throws NoSuchAlgorithmException{
//生成实现指定摘要算法的 MessageDigest 对象。
MessageDigest md5=MessageDigest.getInstance("MD5");
//使用指定的字节数组跟新摘要
md5.update(password.getBytes());
//调用摘要方法返回一个16位的byte数组
byte [] b=md5.digest();
//把数组转换成字符串 [95, 77, -52, 59, 90, -89, 101, -42, 29, -125, 39, -34, -72, -126, -49, -103]
// System.out.println(Arrays.toString(b));
String str=""; //用来接受新生成的字符串
int bvalue=0; //接受B[i]的值,byte+一个数 如果>127会成负数
for (int i = 0; i < b.length; i++) {
bvalue=b[i];
if(b[i]<0){
bvalue+=256; //把负数转换成正数 自己想怎么定义怎么定义,大于0就行
//最好大于16 Integer.toHexString(x); x大于等于16会形成一个2位的二进制数字
//小于16只有一位,不方便统计位数
}
//java.lang.Integer.toHexString() 方法返回为无符号整数基数为16的整数参数的字符串表示形式。
//以下字符作为十六进制数字:0123456789ABCDEF
String s=Integer.toHexString(bvalue); //一个两位的十六静止数字
str+=s; //16次 所以是32位
}
return str;
}
}
注册的时候进行密码加密:
@Override
public TaoTaoResult register(TbUser user) {
// TODO Auto-generated method stub
//补全user信息
user.setCreated(new Date());
user.setUpdated(new Date());
//密码加密 MD5加密
//生成一个MD5加密计算
String encryptedPwd=null;
try {
encryptedPwd=MyMD5Util.md5(user.getPassword());
} catch (NoSuchAlgorithmException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
user.setPassword(encryptedPwd);
userMapper.insertSelective(user);
return new TaoTaoResult(200, null);
}
登录的时候将传过来的密码进行同样的加密,然后在对面数据库中的密码,判断是否相同
@Override
public TaoTaoResult login(String username,String password) {
// TODO Auto-generated method stub
//根据username获取用户信息
TbUserExample example =new TbUserExample();
example.createCriteria().andUsernameEqualTo(username);
List<TbUser> list=userMapper.selectByExample(example);
//把pssword进行加密
String encryptedPwd=null;
try {
encryptedPwd=MyMD5Util.md5(password);
} catch (NoSuchAlgorithmException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
//进行比较
if(list.size()==0||list==null){
return new TaoTaoResult(400, false, "帐号不存在");
}else{
//判断密码是否匹配
if(list.get(0).getPassword().equals(encryptedPwd)){
//帐号密码匹配
//生成token,把token保存到redis
//返回登录成功 把token写入到cookie
String token=UUID.randomUUID().toString();
//jedis注入jedisCluster
//value 是对象信息
ObjectMapper mapper=new ObjectMapper();
String json=null;
try {
json = mapper.writeValueAsString(list.get(0));
} catch (JsonProcessingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
jedisCluster.set(token, json);
//保存到redis里面
jedisCluster.set("USER_LOGIN_SUCCESS:"+token, json);
//设置过期时间
jedisCluster.expire("USER_LOGIN_SUCCESS:"+token, 30*60);
return new TaoTaoResult(200, "USER_LOGIN_SUCCESS:"+token, "ok");
}else{
return new TaoTaoResult(400, false, "密码错误");
}
}
}