首页 > 其他分享 >修改密码

修改密码

时间:2024-05-09 15:13:34浏览次数:17  
标签:修改 resp req 密码 null id

整体思路:

在dao层写接口约束,在实现类中写乡音给的代码,传入的参数是用户的id,通过用户的id修改此用户的密码,返回参数类型为int,即有几条受影响的条数;
在service层中写service的接口约束,在实现类中调用dao层,这里的调用通常都是利用实例化service实现类时通过构造方法实例化dao,这里方法的参数是用户的id,返回类型用一个布尔值来表示是否修改成功即可;
编写servlet,在这里接收前段的请求参数,调用service层处理业务,一般是一些判断方法,旧密码是否正确等,最后返回视图。
  

在dao层,查找当前用户,将当前用户的密码进行修改

```java
//修改当前用户密码,传入的参数用于修改密码
//增删改都会影响数据库的变化,所以是返回int类型,说明有几行受到了影响
@Override
public int updatePwd(Connection connection, int id, int password) throws Exception {
   int updateRow=0;
   PreparedStatement pstm=null; //预编译sql对象
   if (connection!=null){//判断是否连接
       String sql="UPDATE `smbms_user` SET `userPassword`=? WHERE `id`=? ";//编写sql语句
       Object[] params={password,id};//将传入的参数进行封装
       BaseDao.execute(connection,sql,params,pstm);
   }
   BaseDao.closeResource(null,pstm,null);//关闭资源
   return updateRow;//返回受影响的条数
}
```
在service层,调用dao层,查找servlet层传来的数据的相关用户,并于servlet层数据进行对比

```java
//传入的参数来自前端用户的输入
public boolean updatePwd(int id, int pwd) {
      Connection connection=null;
      boolean flag=false;
      try {
          connection = BaseDao.getConnection();
          //修改数据库成功
          if (userDao.updatePwd(connection, id, pwd)>0){
              flag=true;

          }
      } catch (Exception e) {
          e.printStackTrace();
      }finally {
          BaseDao.closeResource(connection,null,null);
      }
      return flag;
  }
```
编写修改密码的servlet类,梳理整体逻辑
```java
public class UserServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String method = req.getParameter("method");
        if (method.equals("savepwd")&&method!=null){
            this.modifyPwd(req,resp);//调用修改密码的函数,为了代码的复用
        }else if (method.equals("pwdmodify")&&method!=null){
            this.pwdmodify(req,resp);
        }
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
    //修改密码
    public void modifyPwd(HttpServletRequest req, HttpServletResponse resp){
        //获取要修改的密码和id
        Object attribute = req.getSession().getAttribute(Constants.USER_SESSION);//从session中获取保存的user
        String newpassword = req.getParameter("newpassword");//获取新密码
        boolean flag = false;
        //判断这个session和新密码是否存在
        if(attribute!=null && !StringUtils.isNullOrEmpty(newpassword)){
            UserServiceImpl userService = new UserServiceImpl();
            flag = userService.modifyPwd(((User) attribute).getId(), newpassword);
            if(flag){
                req.setAttribute("message","修改密码成功");
                //密码修改成功移除当前session
                req.getSession().removeAttribute(Constants.USER_SESSION);
            }else {
                req.setAttribute("message","密码修改失败");
            }
        }else{
            //新密码有问题
            req.setAttribute("message","新密码有问题");
        }
        try {
            req.getRequestDispatcher("pwdmodify.jsp").forward(req,resp);
        } catch (ServletException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
```
优化密码使用ajax:

```java
public void pwdModify(HttpServletRequest req, HttpServletResponse resp) throws IOException {
        //从Session中拿ID
        Object o = req.getSession().getAttribute(Constant.USER_SESSION);
        String oldpassword = req.getParameter("oldpassword");

        //万能的Map : 结果集
        Map<String, String> resultMap = new HashMap<String, String>();

        if(null == o ){//session过期、失效
            resultMap.put("result", "sessionerror");
        }else if(StringUtils.isNullOrEmpty(oldpassword)){//旧密码输入为空
            resultMap.put("result", "error");
        }else{
            String sessionPwd = ((User)o).getUserPassword();
            if(oldpassword.equals(sessionPwd)){
                resultMap.put("result", "true");
            }else{//旧密码输入不正确
                resultMap.put("result", "false");
            }
        }

        resp.setContentType("application/json");
        PrintWriter outPrintWriter = resp.getWriter();
        outPrintWriter.write(JSONArray.toJSONString(resultMap));
        outPrintWriter.flush();
        outPrintWriter.close();
    }

标签:修改,resp,req,密码,null,id
From: https://www.cnblogs.com/hytip/p/18182287

相关文章

  • 中国移动光猫Fiberhome HG6145F获取超级管理员密码和解决第四号口不能用的问题
    第一步获取光猫MAC地址你看光猫背后就行了,如果没有,就用命令:arp-a192.168.1.1第二步开启telnet访问地址:http://192.168.1.1/cgi-bin/telnetenable.cgi?telnetenable=1&key=你的Mac地址,要求全大写如果成功,网页会显示:telnet开启第三步进入telnet地址还是在电脑用cmd输入:t......
  • linux保存git账号密码
     相信大家都会遇到gitpush提示输入账号密码,每次都要输入很麻烦,下面介绍如何长期保存账号密码1、全局设置记住用户名和电子邮件:gitconfig--globaluser.name"your_username"gitconfig--globaluser.email"[email protected]"2、使用凭证助手存储密码git......
  • mac修改idea中的git密码
    gitlab账号修改了密码,idea拉取远程仓库,无法拉取成功。在设置中勾选Donotsave,forgetpasswordsafterrestart重启如安装了gitlab插件,在插件中不勾选这个插件。(勾选这个插件会提示用Token登录)重新fetch代码,就会提示重新输入密码......
  • Linux之手把手教会修改网卡名称【转载】
    一、为什么要修改网卡名称在早期的linux系统中,网卡名称常常以传统的命名方式eth0、eth1、eth2来命名。例如,CentOS6之前,网络接口使用连续号码命名:eth0、eth1等,但是,如果再新增硬件设备,也有可能会被识别成eth0,eth1等。CentOS7开始,改变了网卡设备命名规则,基于硬件生成网卡名,例如......
  • Linux 7修改网卡名称后,配置文件中的默认网关不生效【转载】
    背景 为了系统统一管理在创建了系统后统一将网卡名称修改为eth0,eth1等格式,并在修改完网卡名称重新编译grub配置文件重启后,添加了静态路由,使用route-n查看系统发现路由可以生效,但是配置的默认网关不生效,记录下排查过程。检查网卡配置文件并手动配置默认网关 在检查了网卡配......
  • 使用同事封装好的table(使用el-table),修改表头背景色怎么实现
    花了一下午时间基本功还是比较差参考博客1首先,要修改表头颜色,需要el-table的属性:header-cell-style可以这样写:header-cell-style="{background:'#409EFF',color:'#409EFF'}"而我有两个点需要考虑1)只有部分表头需要修改颜色2)同事封装的组件,对背景颜色使用了!important解决......
  • Python安装教程手册(pip路径修改,建立模块搜索)
    下载官网64位exe安装包双击安装,一步步往下走    打开cmd命令行,输入Python-V查看安装版本号,检查是否安装成功  输入pip-V查看pip的版本号,检查是否安装成功  设置pip安装的全局库目录输入python-msite,查看当前默认配置的库目录找......
  • 批量修改asp.net core 项目的解决方案的命名空间
    单个命名空间重命名:打开任何使用旧命名空间(例如:“OrchardCore”)的文件。右键点击命名空间名称,选择“重构”然后选择“重命名”。输入新的命名空间名称(例如:“SuperCore”),确保选中“预览更改”,然后点击“应用”。VisualStudio将显示所有受影响的引用,并让你确认修改。全局搜索......
  • oracle 修改字符集 为ZHS16GBK
    相信很多人都会遇到安装oracle后字符集编码不一致而导致的各种问题,现在讲下如何修改字符集格式。 一、查询字符集1、查询oracleserver端字符集selectuserenv('language')fromdual其中NLS_CHARACTERSET为server端字符集NLS_LANGUAGE为server端字符显示形式2、查询o......
  • windows下使用命令行查看已存储的wifi密码
    netshwlanshowinterface查看当前已连接wifi信息  netshwlanshowprofiles查看所有已保存的wifi配置文件     netshwlanshowprofilesname="XXXXXX"key="Clear"查看特定配置文件详情,包括wifi密码,密码在“关键内容”行 ......