超市订单管理系统-密码修改

密码修改

  1. 导入前端页面

    <li><a href="${pageContext.request.contextPath }/jsp/pwdmodify.jsp">密码修改</a></li>
    
  2. 写项目,建议从底层往上写

    image-20210509093228538

  3. UserDao 接口

     //修改当前用户密码
        public int updatePwd(Connection connection, String userCode , String password) throws SQLException;
    
  4. UserDao 接口实现类

        //修改当前用户密码
        public int updatePwd(Connection connection, String userCode, String password){
            PreparedStatement statement = null;
            int update = 0;
            if (connection != null){
                String sql = "update smbms_user set userPassword = ? where userCode = ?;";
                Object[] params = {password, userCode};
                try {
                    update = BaseDao.update(connection, statement, sql, params);
                } catch (SQLException throwables) {
                    throwables.printStackTrace();
                } finally {
                    BaseDao.release(connection,statement,null);
                }
            }
        return update;
        }
    }
    
  5. UserService层

     //修改密码
        boolean updatePwd(String userCode, String password);
    
  6. UserService层实现类

    public boolean updatePwd(String userCode, String password) {
        Connection connection = null;
        boolean flag = false;
    
        try {
            connection = BaseDao.getConnection();
            if (userDao.updatePwd(connection, userCode, password) > 0){
                flag = true;
            }
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }finally {
            BaseDao.release(connection,null,null);
        }
        return flag;
    }
    
  7. 注册servlet

        <servlet>
        <servlet-name>UserServlet</servlet-name>
        <servlet-class>com.tr.servlet.user.UserServlet</servlet-class>
    	</servlet>
        <servlet-mapping>
            <servlet-name>UserServlet</servlet-name>
            <url-pattern>/jsp/user.do</url-pattern>
        </servlet-mapping>
    
  8. 记得实现复用,必须提取出方法

    @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            String method = req.getParameter("method");
            if (method.equals("savepwd") && method != null){
                this.updatePwd(req, resp);
            }  
        }
    
  9. 修改密码方法

    public void updatePwd(HttpServletRequest req, HttpServletResponse resp){
        String newPassword = req.getParameter("newpassword");
        UserService userService = null;
        boolean flag = false;
    
        Object o = req.getSession().getAttribute(Constant.USER_SESSION);
    
    
        if (o != null && newPassword != null /*!StringUtils.isNullOrEmpty(newPassword)*/){
            userService = new UserServiceImpl();
            flag = userService.updatePwd(((User) o).getUserCode(), newPassword);
            if (flag){
                req.setAttribute(Constant.MESSAGE, "修改密码成功,请重新登录");
                //密码修改成功,移除当前Session
                req.getSession().removeAttribute(Constant.USER_SESSION);
    
            } else {
                req.setAttribute(Constant.MESSAGE, "修改密码失败");
            }
        } else {
            req.setAttribute(Constant.MESSAGE, "新密码有误");
        }
    
        try {
            resp.sendRedirect("pwdmodify.jsp");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    
  10. 测试

优化密码修改使用Ajax;

  1. 阿里巴巴的fastjson

            <!-- https://mvnrepository.com/artifact/com.alibaba/fastjson -->
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>fastjson</artifactId>
                <version>1.2.76</version>
            </dependency>
    
  2. 后台密码修改

        //验证旧密码 session中有用户的密码
        public void pwdModify(HttpServletRequest req, HttpServletResponse resp){
            Object o = req.getSession().getAttribute(Constant.USER_SESSION);
            String oldpassword = req.getParameter("oldpassword");
            
            //万能的Map:结果集
            Map<String, String> resultMap = new HashMap<String, String>();
            
            if (o == null){//Session过期了或者Session失效了
                resultMap.put("result","sessionerror");
            } else if (StringUtils.isNullOrEmpty(oldpassword)) { //如果密码为空
                resultMap.put("result","error");
            } else {
                String userPassword = ((User) o).getUserPassword();
                if (userPassword.equals(oldpassword)){
                    resultMap.put("result","true"); //如果前端传过来的密码和session中相同
                    //真正开发中还要考虑多端登录  多端修改密码
                } else {
                    resultMap.put("result","false");//如果不同
                }
            }
            
           
            try {
                resp.setContentType("application/json");
                PrintWriter writer = resp.getWriter();
                writer.write(JSONArray.toJSONString(resultMap));
                writer.flush();
            } catch (IOException e) {
                e.printStackTrace();
            } 
        
        }
    
  3. 测试

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
超市管理系统: 1.数据库设计: smbms_user 超市的工作人员 每个工作人员都有角色 smbms_role 人员的角色 3种: 系统管理员: 经理 : 普通员工: smbms_bill 超市账单 账单属于某个供应商 smbms_provider 供应商 2.项目框架设计: myeclipse+mysql+java web(servlet|jsp) 3.开发模式: MVC开发模式 注意: (1)创建项目与数据库时,采用UTF-8的编码. EncodingFilter (2)项目搭建 smbms src source folder com.hfxt.entity com.hfxt.controller UserServlet ProviderServlet BillServlet ... com.hfxt.filter com.hfxt.listener com.hfxt.service com.hfxt.service.impl com.hfxt.dao com.hfxt.dao.impl com.hfxt.util ... resources source folder db.properties test source folder WebRoot/ commom/存放公共页面 css/ img/ js/ /WEB-INF/admin(存放jsp) (3)jsp:建议放在WEB-INF下 html-》jsp:后缀名+page头部声明 jsp中的资源引用: 绝对路径: ①${pageContext.request.contextPath }/css/style.css 或者 ②<%=request.getContextPath()%> ③<c:set var="path" value="${pageContext.request.contextPath }"/> 可以使用${path}来获取 相对路径时相对于url(不建议) 统一: /admin/user/* /admin/provider/* ... <filter-mapping> <url-pattern>/admin/*</url-pattern> <> 如何处理登录问题? ①方式1 login.jsp放在WEB-INF /admin/user/toLogin->login.jsp /admin/user/login->点击登录时的处理 在过滤器中,if(url.indexOf("/toLogin") != -1 ||...){ //放行 chain.doFilter(request,response); return; } ②方式2 单独放置登录页面 login.html login.jsp 4.项目周期 1周时间 项目答辩时间: 5.项目分析: (1)登录功能: ①根据用户名查询数据库, 将用户输入的密码加密, 与数据库查询出的密码进行比对. 加密方法: String p2 = Base64.encode(p.getBytes() );//Base64方式加密 或者 String password = DigestUtils.md5Hex(value);//MD5方式加密 ②登录 public User login(String us,String ps){} public String login(String username){ //根据username查询密码p1 | 根据p1和输入的密码p1比较 | ------------------- |后台 | 相等,登录 否则,登录失败 } (2)控制器使用Servlet分发请求控制,实现一个Servlet处理多个请求 (3)根据用户角色id,来判断是否显示哪些管理模块, 或者是否显示删除、增加和修改图标 (4)页面提取: 首页等页面的头部,左侧导航,底部 等都可以单独的提取到JSP中. 在源页面上进行引用. <%@include file=""%> <jsp:include page="">等 (百度搜索iframe的使用) (5)账单,供应商,用户查询列表带分页。 该分页查询还需带条件。 条件查询: 支持模糊查询。 条件在查询之后, 要继续回显到页面上。 (6)供应商下拉列表: 1.在准备跳转目标页面的servlet中,查询所有供应商信息. 传到页面上 2.在JSP页面上, 拿到传递来的供应商信息.动态展示在下拉列表中. (7)账单,供应商,用户新增修改时: 1.页面必须有JS客户端验证. 2.Servlet服务端获取页面参数时,必须要有服务端验证. 例如判空 3.新增的成功失败给出提示. 4.用户新增时,注意界面使用的日期控件.和新增前,密码加密存储. (8)用户查询: 管理员可以查看所有用户列表. 经理与普通用户只能查看自身信息,没有权限查看所有用户,无需显示用户列表,值显示自己信息即可。 (9)账单,供应商,用户修改功能: 主键编号等不让改.修改页面依然需要JS验证. 服务端验证. 修改成功,失败给出提示. 用户修改: 权限修改. 只提供给管理员,用来修改普通用户与经理. (10)账单,供应商,用户删除功能: 需要弹窗提示.也可以自己编写界面 确认删除之后,成功失败给出提示. 供应商删除: 检查当有所属未支付账单时,给出提示,不允许删除.如果没有,则删除该供应商的所有账单 用户删除: 不允许删除自身. (11)密码修改功能: 1.修改密码页面,必须有JS验证.服务端验证. 2.旧密码必须与当前登录账号的密码相同. 3.新密码修改时,加密存储. 4.修改密码失败,在当前页面给出提示.修改成功,提示请重新登录,自动退出并跳往登录页,保证session失效 (12)访问权限控制: 1.增加过滤器. 登录页面可直接访问. 如果访问不是登录地址,则根据session判断是否登录. 如果已经登录,核心页面直接显示; 如果没有登录,跳转到登录页面; 如果已经登录,访问登录页面,跳转到核心页面 (13)错误页配置: 1.编写错误页. 2. 在web.xml中配置: <error-page> <error-code>404</error-code> <location>/404Error.jsp</location> </error-page> <error-page> <error-code>500</error-code> <location>/500Error.jsp</location> </error-page>

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值