Java SSM 项目实战 day05 用户操作

Rendering engine Browser Platform(s) Engine version CSS grade -->

总共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)运行测试

      在这里插入图片描述

      在这里插入图片描述

      在这里插入图片描述

      用户状态没有显示

      修改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”

      onclick=“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’);

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

        在这里插入图片描述

        8、再次查询

        在这里插入图片描述

        在这里插入图片描述

        在这里插入图片描述

        | | |

      评论
      添加红包

      请填写红包祝福语或标题

      红包个数最小为10个

      红包金额最低5元

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

      抵扣说明:

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

      余额充值