《一线大厂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”%>
<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道真实出现过的经典代码面试题,帮助广“大程序员的面试准备做到万无一失。 “刷”完本书后,你就是“题王”!
《TCP-IP协议组(第4版)》
本书是介绍TCP/IP协议族的经典图书的最新版本。本书自第1版出版以来,就广受读者欢迎。
本书最新版进行」护元,以体境计算机网络技不的最新发展,全书古有七大部分共30草和7个附录:第一部分介绍一些基本概念和基础底层技术:第二部分介绍网络层协议:第三部分介绍运输层协议;第四部分介绍应用层协议:第五部分介绍下一代协议,即IPv6协议:第六部分介绍网络安全问题:第七部分给出了7个附录。
Java开发手册(嵩山版)
这个不用多说了,阿里的开发手册,每次更新我都会看,这是8月初最新更新的**(嵩山版)**
MySQL 8从入门到精通
本书主要内容包括MySQL的安装与配置、数据库的创建、数据表的创建、数据类型和运算符、MySQL 函数、查询数据、数据表的操作(插入、更新与删除数据)、索引、存储过程和函数、视图、触发器、用户管理、数据备份与还原、MySQL 日志、性能优化、MySQL Repl ication、MySQL Workbench、 MySQL Utilities、 MySQL Proxy、PHP操作MySQL数据库和PDO数据库抽象类库等。最后通过3个综合案例的数据库设计,进步讲述 MySQL在实际工作中的应用。
Spring5高级编程(第5版)
本书涵盖Spring 5的所有内容,如果想要充分利用这一领先的企业级 Java应用程序开发框架的强大功能,本书是最全面的Spring参考和实用指南。
本书第5版涵盖核心的Spring及其与其他领先的Java技术(比如Hibemate JPA 2.Tls、Thymeleaf和WebSocket)的集成。本书的重点是介绍如何使用Java配置类、lambda 表达式、Spring Boot以及反应式编程。同时,将与企业级应用程序开发人员分享一些见解和实际经验,包括远程处理、事务、Web 和表示层,等等。
JAVA核心知识点+1000道 互联网Java工程师面试题
企业IT架构转型之道 阿里巴巴中台战略思想与架构实战
本书讲述了阿里巴巴的技术发展史,同时也是-部互联网技 术架构的实践与发展史。
《一线大厂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面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》,点击传送门,即可获取!