Java SSM 项目实战 day05 用户操作

《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门,即可获取!

在这里插入图片描述

(6)运行测试

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

用户状态没有显示

修改UserInfo

在这里插入图片描述

public String getStatusStr() {

//状态0 表示未开启 1表示开启

if(status == 0){

statusStr = “未开启”;

}else if(status == 1){

statusStr = “开启”;

}

return statusStr;

}

在这里插入图片描述

二、创建用户


在这里插入图片描述

1、创建user-add.jsp

在这里插入图片描述

<%@ page language=“java” contentType=“text/html; charset=UTF-8”

pageEncoding=“UTF-8”%>

数据 - AdminLTE2定制版

<meta content=“width=device-width,initial-scale=1,maximum-scale=1,user-scalable=no”

name=“viewport”>

href=“${pageContext.request.contextPath}/plugins/bootstrap/css/bootstrap.min.css”>

href=“${pageContext.request.contextPath}/plugins/font-awesome/css/font-awesome.min.css”>

href=“${pageContext.request.contextPath}/plugins/ionicons/css/ionicons.min.css”>

href=“${pageContext.request.contextPath}/plugins/iCheck/square/blue.css”>

href=“${pageContext.request.contextPath}/plugins/morris/morris.css”>

href=“${pageContext.request.contextPath}/plugins/jvectormap/jquery-jvectormap-1.2.2.css”>

href=“${pageContext.request.contextPath}/plugins/datepicker/datepicker3.css”>

href=“${pageContext.request.contextPath}/plugins/daterangepicker/daterangepicker.css”>

href=“${pageContext.request.contextPath}/plugins/bootstrap-wysihtml5/bootstrap3-wysihtml5.min.css”>

href=“${pageContext.request.contextPath}/plugins/datatables/dataTables.bootstrap.css”>

href=“${pageContext.request.contextPath}/plugins/treeTable/jquery.treetable.css”>

href=“${pageContext.request.contextPath}/plugins/treeTable/jquery.treetable.theme.default.css”>

href=“${pageContext.request.contextPath}/plugins/select2/select2.css”>

href=“${pageContext.request.contextPath}/plugins/colorpicker/bootstrap-colorpicker.min.css”>

href=“${pageContext.request.contextPath}/plugins/bootstrap-markdown/css/bootstrap-markdown.min.css”>

href=“${pageContext.request.contextPath}/plugins/adminLTE/css/AdminLTE.css”>

href=“${pageContext.request.contextPath}/plugins/adminLTE/css/skins/_all-skins.min.css”>

href=“${pageContext.request.contextPath}/css/style.css”>

href=“${pageContext.request.contextPath}/plugins/ionslider/ion.rangeSlider.css”>

href=“${pageContext.request.contextPath}/plugins/ionslider/ion.rangeSlider.skinNice.css”>

href=“${pageContext.request.contextPath}/plugins/bootstrap-slider/slider.css”>

href=“${pageContext.request.contextPath}/plugins/bootstrap-datetimepicker/bootstrap-datetimepicker.css”>

<jsp:include page=“header.jsp”></jsp:include>

<jsp:include page=“aside.jsp”></jsp:include>

用户管理 用户表单

  • class=“fa fa-dashboard”> 首页

  • href=“${pageContext.request.contextPath}/user/findAll.do”>用户管理

  • 用户表单
  • method=“post”>

    用户信息
    用户名称

    <input type=“text” class=“form-control” name=“username”

    placeholder=“用户名称” value=“”>

    密码

    <input type=“password” class=“form-control” name=“password”

    placeholder=“密码” value=“”>

    邮箱

    <input type=“text” class=“form-control” name=“email”

    placeholder=“邮箱” value=“”>

    联系电话

    <input type=“text” class=“form-control” name=“phoneNum”

    placeholder=“联系电话” value=“”>

    用户状态

    <select class=“form-control select2” style=“width: 100%”

    name=“status”>

    关闭 开启

    保存

    <button type=“button” class=“btn bg-default”

    οnclick=“history.back(-1);”>返回

    Version 1.0.8

    Copyright © 2014-2017 <a

    href=“http://www.itcast.cn”>研究院研发部.

    All rights reserved.

    点击新建

    在这里插入图片描述

    在这里插入图片描述

    2、在UserController当中创建用户添加方法,创建save方法

    在这里插入图片描述

    //用户添加

    @RequestMapping(“/save.do”)

    public String save(UserInfo userInfo) throws Exception{

    userService.save(userInfo);

    return “redirect:findAll.do”;

    }

    在这里插入图片描述

    3、业务层
    (1)IUserService

    在这里插入图片描述

    void save(UserInfo userInfo) throws Exception;

    (2)UserServiceImpl

    在这里插入图片描述

    @Override

    public void save(UserInfo userInfo) throws Exception {

    userDao.save(userInfo);

    }

    (3)IUserDao

    在这里插入图片描述

    @Insert(“insert into users(email,username,password,phoneNum,status) values (#{email},#{username},#{password},#{phoneNum},#{status})”)

    void save(UserInfo userInfo) throws Exception;

    (4)配置加密,在UserServiceImpl当中配置

    在这里插入图片描述

    @Autowired

    private BCryptPasswordEncoder bCryptPasswordEncoder;

    @Override

    public void save(UserInfo userInfo) throws Exception {

    //对密码进行加密处理

    userInfo.setPassword(bCryptPasswordEncoder.encode(userInfo.getPassword()));

    userDao.save(userInfo);

    }

    (5)创建工具类BCryptPassWordEncoderUtils

    在zheng_ssm_utils当中的src当中的main的java当中的com.itzheng.ssm.utils当中创建BCryptPassWordEncoderUtils类

    在这里插入图片描述

    package com.itzheng.ssm.utils;

    import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;

    public class BCryptPasswordEncoderUtils {

    private static BCryptPasswordEncoder bCryptPassWordEncoder = new BCryptPasswordEncoder();

    public static String encodePassword(String password) {

    return bCryptPassWordEncoder.encode(password);

    }

    public static void main(String[] args) {

    String password = “123”;

    String rpassword = encodePassword(password);

    System.out.println(rpassword);

    }

    }

    如果报错说明没有引入org.springframework.security手动引入

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    运行测试项目

    在这里插入图片描述

    在这里插入图片描述

    每次运行项目结果不一样

    在这里插入图片描述

    (6)运行项目添加用户

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    运行后报错

    提示密码的值太大

    在这里插入图片描述

    报错的原因是加密后的字段比较长无法存入到数据库当中

    更改数据库当中的password的长度

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    从新添加一下用户

    在这里插入图片描述

    添加成功

    在这里插入图片描述

    (8)处理用户(在密码加密之后不能登录的问题),因为密码被加密了

    修改spring-security.xml文件

    在这里插入图片描述

    security:authentication-manager

    <security:authentication-provider user-service-ref=“userService”>

    <security:password-encoder ref=“passwordEncoder”/>

    </security:authentication-provider>

    </security:authentication-manager>

    修改UserServiceImpl当中的loadUserByUsername

    在这里插入图片描述

    //处理自己的用户对象封装成UserDetails

    // User user=new User(userInfo.getUsername(),“{noop}”+userInfo.getPassword(),getAuthority(userInfo.getRoles()));

    User user = new User(userInfo.getUsername(), userInfo.getPassword(), userInfo.getStatus() == 0 ? false : true, true, true, true, getAuthority(userInfo.getRoles()));

    在这里插入图片描述

    登录成功

    (9)在数据库当中修改一下Tom的密码

    在这里插入图片描述

    复制工具类生成的密码,设置到数据库当中

    在这里插入图片描述

    并提交

    三、用户详情查询流程分析


    在这里插入图片描述

    1、在UserController当中创建对应从查询方法

    在这里插入图片描述

    @RequestMapping(“/findById.do”)

    public ModelAndView findById(String id)throws Exception{

    ModelAndView mv = new ModelAndView();

    UserInfo userInfo = userService.findById(id);

    return mv;

    }

    2、业务层IUserService当中创建对应的方法

    在这里插入图片描述

    在这里插入图片描述

    UserInfo findById(String id) throws Exception;

    在UserServiceImpl当中

    在这里插入图片描述

    @Override

    public UserInfo findById(String id) throws Exception {

    return userDao.findById(id);

    }

    3、dao当中IUserDao当中创建对应的方法的查询方法
    (1)创建IPermissionDao接口

    在这里插入图片描述

    在这里插入图片描述

    package com.itzheng.ssm.dao;

    import com.itzheng.ssm.domain.Permission;

    import org.apache.ibatis.annotations.Select;

    import java.util.List;

    public interface IPermissionDao {

    @Select(“select * from permission where id in (select permissionId from role_permission where roleId = #{id} )”)

    public List findPermissionByRoleId(String id) throws Exception;

    }

    (2) IRoleDao当中的findRoleByUserId

    在这里插入图片描述

    package com.itzheng.ssm.dao;

    import com.itzheng.ssm.domain.Role;

    import org.apache.ibatis.annotations.Many;

    import org.apache.ibatis.annotations.Result;

    import org.apache.ibatis.annotations.Results;

    import org.apache.ibatis.annotations.Select;

    import java.util.List;

    public interface IRoleDao {

    //根据用户id查询出所有对应的角色

    @Select(“select * from role where id in (select roleId from users_role where userId=#{userId})”)

    @Results({

    @Result(id = true, property = “id”, column = “id”),

    @Result(property = “roleName”, column = “roleName”),

    @Result(property = “roleDesc”, column = “roleDesc”),

    @Result(property = “permissions”, column = “id”, javaType = java.util.List.class, many = @Many(select = “com.itzheng.ssm.dao.IPermissionDao.findPermissionByRoleId”))

    })

    public List findRoleByUserId(String userId) throws Exception;

    }

    4、完善UserController的findById方法

    在这里插入图片描述

    设置跳转的界面

    //查询指定id的用户

    @RequestMapping(“/findById.do”)

    public ModelAndView findById(String id)throws Exception{

    ModelAndView mv = new ModelAndView();

    UserInfo userInfo = userService.findById(id);

    mv.addObject(“userInfo”,userInfo);

    mv.setViewName(“user-show”);

    return mv;

    }

    5、创建user-show.jsp

    在这里插入图片描述

    <%@ page language=“java” contentType=“text/html; charset=UTF-8”

    pageEncoding=“UTF-8” %>

    <%@taglib uri=“http://java.sun.com/jsp/jstl/core” prefix=“c” %>

    数据 - AdminLTE2定制版

    <meta

    content=“width=device-width,initial-scale=1,maximum-scale=1,user-scalable=no”

    name=“viewport”>

    href=“${pageContext.request.contextPath}/plugins/bootstrap/css/bootstrap.min.css”>

    href=“${pageContext.request.contextPath}/plugins/font-awesome/css/font-awesome.min.css”>

    href=“${pageContext.request.contextPath}/plugins/ionicons/css/ionicons.min.css”>

    href=“${pageContext.request.contextPath}/plugins/iCheck/square/blue.css”>

    href=“${pageContext.request.contextPath}/plugins/morris/morris.css”>

    href=“${pageContext.request.contextPath}/plugins/jvectormap/jquery-jvectormap-1.2.2.css”>

    href=“${pageContext.request.contextPath}/plugins/datepicker/datepicker3.css”>

    href=“${pageContext.request.contextPath}/plugins/daterangepicker/daterangepicker.css”>

    href=“${pageContext.request.contextPath}/plugins/bootstrap-wysihtml5/bootstrap3-wysihtml5.min.css”>

    href=“${pageContext.request.contextPath}/plugins/datatables/dataTables.bootstrap.css”>

    href=“${pageContext.request.contextPath}/plugins/treeTable/jquery.treetable.css”>

    href=“${pageContext.request.contextPath}/plugins/treeTable/jquery.treetable.theme.default.css”>

    href=“${pageContext.request.contextPath}/plugins/select2/select2.css”>

    href=“${pageContext.request.contextPath}/plugins/colorpicker/bootstrap-colorpicker.min.css”>

    href=“${pageContext.request.contextPath}/plugins/bootstrap-markdown/css/bootstrap-markdown.min.css”>

    href=“${pageContext.request.contextPath}/plugins/adminLTE/css/AdminLTE.css”>

    href=“${pageContext.request.contextPath}/plugins/adminLTE/css/skins/_all-skins.min.css”>

    href=“${pageContext.request.contextPath}/css/style.css”>

    href=“${pageContext.request.contextPath}/plugins/ionslider/ion.rangeSlider.css”>

    href=“${pageContext.request.contextPath}/plugins/ionslider/ion.rangeSlider.skinNice.css”>

    href=“${pageContext.request.contextPath}/plugins/bootstrap-slider/slider.css”>

    <jsp:include page=“header.jsp”></jsp:include>

    <jsp:include page=“aside.jsp”></jsp:include>

    用户管理

    全部用户

  • class=“fa fa-dashboard”> 首页

  • href=“${pageContext.request.contextPath}/user/findAll.do”>用户管理

  • 全部用户
  • 列表

    新建

    刷新

    <input type=“text” class=“form-control input-sm”

    placeholder=“搜索”> <span

    class=“glyphicon glyphicon-search form-control-feedback”>

    class=“table table-bordered table-hover dataTable”>

    名称 描述 ${user.username}

    <c:forEach items=“${user.roles}” var=“role” varStatus=“vs1”>

    ${role.roleName } ${role.roleDesc }

    <c:forEach items=“${role.permissions}” var=“permission” varStatus=“vs2”>

    data-tt-parent-id=“${vs1.index+1}”>

    ${permission.permissionName} ${permission.url}

    </c:forEach>

    </c:forEach>

    总共2 页,共14 条数据。 每页

    1 2 3 4 5

    • 首页
    • 上一页
    • 1
    • 2
    • 3
    • 4
    • 5
    • 下一页
    • 尾页
    • Version 1.0.8

      Copyright © 2014-2017 <a

      href=“http://www.itcast.cn”>研究院研发部.

      All rights reserved.

      6、运行测试

      在这里插入图片描述

      在这里插入图片描述

      7、没有显示权限信息需要在数据库当中插入一些数据
      (1)向permission当中插入数据

      insert into permission(permissionname,url) values (‘user findAll’,‘/user/findAll.do’);

      insert into permission(permissionname,url) values (‘user findById’,‘/user/findById.do’);

      在这里插入图片描述

      在这里插入图片描述

      在这里插入图片描述

      (2)向中间表role_permission当中插入数据

      insert into ROLE_PERMISSION(permissionid,roleid) values(‘61DC9373D3364855A98111F6E7D87CC2’,‘1111’);

      insert into ROLE_PERMISSION(permissionid,roleid) values(‘C6548DDAF9E841389C591BBD7022E56D’,‘1111’);

      最后

      小编在这里分享些我自己平时的学习资料,由于篇幅限制,pdf文档的详解资料太全面,细节内容实在太多啦,所以只把部分知识点截图出来粗略的介绍,每个小节点里面都有更细化的内容!

      程序员代码面试指南 IT名企算法与数据结构题目最优解

      这是” 本程序员面试宝典!书中对IT名企代码面试各类题目的最优解进行了总结,并提供了相关代码实现。针对当前程序员面试缺乏权威题目汇总这一-痛点, 本书选取将近200道真实出现过的经典代码面试题,帮助广“大程序员的面试准备做到万无一失。 “刷”完本书后,你就是“题王”!

      image.png

      《TCP-IP协议组(第4版)》

      本书是介绍TCP/IP协议族的经典图书的最新版本。本书自第1版出版以来,就广受读者欢迎。

      本书最新版进行」护元,以体境计算机网络技不的最新发展,全书古有七大部分共30草和7个附录:第一部分介绍一些基本概念和基础底层技术:第二部分介绍网络层协议:第三部分介绍运输层协议;第四部分介绍应用层协议:第五部分介绍下一代协议,即IPv6协议:第六部分介绍网络安全问题:第七部分给出了7个附录。

      image.png

      Java开发手册(嵩山版)

      这个不用多说了,阿里的开发手册,每次更新我都会看,这是8月初最新更新的**(嵩山版)**

      image.png

      MySQL 8从入门到精通

      本书主要内容包括MySQL的安装与配置、数据库的创建、数据表的创建、数据类型和运算符、MySQL 函数、查询数据、数据表的操作(插入、更新与删除数据)、索引、存储过程和函数、视图、触发器、用户管理、数据备份与还原、MySQL 日志、性能优化、MySQL Repl ication、MySQL Workbench、 MySQL Utilities、 MySQL Proxy、PHP操作MySQL数据库和PDO数据库抽象类库等。最后通过3个综合案例的数据库设计,进步讲述 MySQL在实际工作中的应用。

      image.png

      Spring5高级编程(第5版)

      本书涵盖Spring 5的所有内容,如果想要充分利用这一领先的企业级 Java应用程序开发框架的强大功能,本书是最全面的Spring参考和实用指南。

      本书第5版涵盖核心的Spring及其与其他领先的Java技术(比如Hibemate JPA 2.Tls、Thymeleaf和WebSocket)的集成。本书的重点是介绍如何使用Java配置类、lambda 表达式、Spring Boot以及反应式编程。同时,将与企业级应用程序开发人员分享一些见解和实际经验,包括远程处理、事务、Web 和表示层,等等。

      image.png

      JAVA核心知识点+1000道 互联网Java工程师面试题

      image.png

      image.png

      企业IT架构转型之道 阿里巴巴中台战略思想与架构实战

      本书讲述了阿里巴巴的技术发展史,同时也是-部互联网技 术架构的实践与发展史。

      image.png
      《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门,即可获取!
      DM0,size_16,color_FFFFFF,t_70)

      (2)向中间表role_permission当中插入数据

      insert into ROLE_PERMISSION(permissionid,roleid) values(‘61DC9373D3364855A98111F6E7D87CC2’,‘1111’);

      insert into ROLE_PERMISSION(permissionid,roleid) values(‘C6548DDAF9E841389C591BBD7022E56D’,‘1111’);

      最后

      小编在这里分享些我自己平时的学习资料,由于篇幅限制,pdf文档的详解资料太全面,细节内容实在太多啦,所以只把部分知识点截图出来粗略的介绍,每个小节点里面都有更细化的内容!

      程序员代码面试指南 IT名企算法与数据结构题目最优解

      这是” 本程序员面试宝典!书中对IT名企代码面试各类题目的最优解进行了总结,并提供了相关代码实现。针对当前程序员面试缺乏权威题目汇总这一-痛点, 本书选取将近200道真实出现过的经典代码面试题,帮助广“大程序员的面试准备做到万无一失。 “刷”完本书后,你就是“题王”!

      [外链图片转存中…(img-uEIZSjWK-1714668417653)]

      《TCP-IP协议组(第4版)》

      本书是介绍TCP/IP协议族的经典图书的最新版本。本书自第1版出版以来,就广受读者欢迎。

      本书最新版进行」护元,以体境计算机网络技不的最新发展,全书古有七大部分共30草和7个附录:第一部分介绍一些基本概念和基础底层技术:第二部分介绍网络层协议:第三部分介绍运输层协议;第四部分介绍应用层协议:第五部分介绍下一代协议,即IPv6协议:第六部分介绍网络安全问题:第七部分给出了7个附录。

      [外链图片转存中…(img-oXtAkCDo-1714668417654)]

      Java开发手册(嵩山版)

      这个不用多说了,阿里的开发手册,每次更新我都会看,这是8月初最新更新的**(嵩山版)**

      [外链图片转存中…(img-lNsnO9MB-1714668417654)]

      MySQL 8从入门到精通

      本书主要内容包括MySQL的安装与配置、数据库的创建、数据表的创建、数据类型和运算符、MySQL 函数、查询数据、数据表的操作(插入、更新与删除数据)、索引、存储过程和函数、视图、触发器、用户管理、数据备份与还原、MySQL 日志、性能优化、MySQL Repl ication、MySQL Workbench、 MySQL Utilities、 MySQL Proxy、PHP操作MySQL数据库和PDO数据库抽象类库等。最后通过3个综合案例的数据库设计,进步讲述 MySQL在实际工作中的应用。

      [外链图片转存中…(img-4bj4rQ81-1714668417654)]

      Spring5高级编程(第5版)

      本书涵盖Spring 5的所有内容,如果想要充分利用这一领先的企业级 Java应用程序开发框架的强大功能,本书是最全面的Spring参考和实用指南。

      本书第5版涵盖核心的Spring及其与其他领先的Java技术(比如Hibemate JPA 2.Tls、Thymeleaf和WebSocket)的集成。本书的重点是介绍如何使用Java配置类、lambda 表达式、Spring Boot以及反应式编程。同时,将与企业级应用程序开发人员分享一些见解和实际经验,包括远程处理、事务、Web 和表示层,等等。

      [外链图片转存中…(img-ot5Qdvt1-1714668417654)]

      JAVA核心知识点+1000道 互联网Java工程师面试题

      [外链图片转存中…(img-peUe9Xei-1714668417655)]

      [外链图片转存中…(img-t0xuRjD0-1714668417655)]

      企业IT架构转型之道 阿里巴巴中台战略思想与架构实战

      本书讲述了阿里巴巴的技术发展史,同时也是-部互联网技 术架构的实践与发展史。

      [外链图片转存中…(img-M8oNPH26-1714668417655)]
      《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门,即可获取!

    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

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

    抵扣说明:

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

    余额充值