ss修改服务器加密方式,SSM框架新增/修改用户、用户登录时密码加密处理及校验...

加密技术Md5Crypt需要在pom文件中导入包:

commons-codec

commons-codec

1.10

一、第一种实现方法

1)、新增用户时,对新增后的用户密码进行加密

在userService.class中实现如下:

public int adduser(User user) {

user.setUserid(UUID.randomUUID().toString());

user.setPassword(Md5Crypt.md5Crypt(user.getPassword().getBytes()));

return userMapper.insert(user);

}

以上方法同样适用于修改用户密码时。

2)、使用新增的用户登录系统时,需要校验用户输入的密码与后台存储的密码是否一致

在loginService.class中实现如下:

public String checkUser(HttpServletRequest request, User user) {

UserCriteria example = new UserCriteria();

String password = user.getPassword();

example.createCriteria().andUsernameEqualTo(user.getUsername());

List objs = userMapper.selectByExample(example);

if(objs.size()>0){

User user1 = objs.get(0);

//获取后台的用户密码

String md5Pass = MD5CryptUtil.getSalts(user1.getPassword());

//将用户输入的密码加密

String pass = Md5Crypt.md5Crypt(password.getBytes(),md5Pass);

//判断用户输入的密码与后台密码是否一致

if(!pass.equals(user1.getPassword())){

request.setAttribute("error", "密码错误!");

return "index";

}

return "main";

}

}else{

request.setAttribute("error", "用户不存在!");

return "index";

}

}

其中加密工具类实现如下:

import org.apache.commons.codec.digest.DigestUtils;

import org.apache.commons.codec.digest.Md5Crypt;

public class MD5CryptUtil

{

public static void main(String[] args) {

String tt1 = Md5Crypt.md5Crypt("333".getBytes());

System.out.println("~~~"+tt1);//$1$lYz58EdG$kfqNTaHTCdLaHCm/7fzXA1

String mysalt = getSalts(tt1);

System.out.println("~~~"+mysalt);//$1$lYz58EdG$

System.out.println("~~~"+Md5Crypt.md5Crypt("333".getBytes(), mysalt));//$1$lYz58EdG$kfqNTaHTCdLaHCm/7fzXA1

}

public static String getSalts(String password) {

String[] salts = password.split("\\$");

if (salts.length < 1) {

return "";

}

String mysalt = "";

for (int i = 1; i < 3; i++) {

mysalt += "$" + salts[i];

}

mysalt += "$";

return mysalt;

}

}

可以看到,登录时校验密码是否正确,先是取出后台该用户存储的密码,然后截取后台存储密码的$...$这部分。再把Md5Crypt.md5Crypt(用户登录时输入的密码.getBytes(), 截取的后台电部分加密的密码)进行加密,最后比该结果与后台存储的加密密码是否一致,即可校验密码的正确性。

二、md5加密密码还有一种方法,但是感觉不太安全。

以下是用户新增时,将用户密码和userid组合起来进行md5加密。

用户登录时,取登录时输入的密码与后台该用户对应的userid合起来进行md5加密。

最后比较两者是否一致。

1)、在userservice中实现

public int adduser(User user) {

user.setUserid(UUID.randomUUID().toString());

user.setPassword(DigestUtils.md5Hex(user.getPassword()+user.getUserid()));

return userMapper.insert(user);

}

2)、在loginservice类中校验

public String checkUser(HttpServletRequest request, User user) {

UserCriteria example = new UserCriteria();

String password = user.getPassword();

example.createCriteria().andUsernameEqualTo(user.getUsername());

List objs = userMapper.selectByExample(example);

if(objs.size()>0){

User user1 = objs.get(0);

String pass = DigestUtils.md5Hex(password +user1.getUserid());

//判断用户输入的密码与后台密码是否一致

if(!pass.equals(user1.getPassword())){

request.setAttribute("error", "密码错误!");

return "index";

}else{

request.getSession().setAttribute("user",user1);

return "main";

}

}else{

request.setAttribute("error", "用户不存在!");

return "index";

}

}

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值