12.4.重置密码12.5.分配角色
12.5.1.初始化用户角色列表12.5.2.分配角色 12.6 获取当前登录用户
12.6.1.数据层12.6.2.业务层12.6.3.控制层
12.7 优化查询12.8 自定义403页面
建议配合视频学习食用(5-2~5-7):
https://www.bilibili.com/video/BV1rr4y1F7Y2?p=1
1.控制层
userManager.jsp添加一个function
function resetPwd(data) {
layer./confirm/i("确定要重置["+data.realName+"]用户的密码吗?",{icon:3,title:"提示"},function (index) {
//发送请求
$.post("/admin/user/resetPwd",{"id":data.id},function(result){
if(result.success){
//提示
layer.alert(result.message,{icon:3});
//刷新数据表格
tableIns.reload();
}else{
//提示
layer.alert(result.message,{icon:2});
}
},"json");
layer.close(index);
});
}
UserController.java
@ResponseBody
@RequestMapping("/resetPwd")
public String resetPwd(Integer id){
Map map = new HashMap();
if(userService.resetPwd(id)>0){
map.put(SystemConstants.SUCCESS,true);
map.put(SystemConstants.MESSAGE,"重置密码成功");
}else{
map.put(SystemConstants.SUCCESS,false);
map.put(SystemConstants.MESSAGE,"重置密码失败");
}
return JSON.toJSONString(map);
}
2.业务层
SysUserService.java
int resetPwd(Integer id);
SysUserServiceImpl.java
public int resetPwd(Integer id) {
//创建用户对象
SysUser sysUser = new SysUser();
sysUser.setId(id);//用户ID
//sysUser.setModifyBy(userId);//修改人
sysUser.setPassword(PasswordUtil.encode(SystemConstants.DEFAULT_PASSWORD));
sysUser.setModifyDate(new Date());
return userMapper.updateUser(sysUser);
}
3.重置密码本身和修改用户差差不多,所以简单的重置密码不需要重新设置dao层
12.5.分配角色 12.5.1.初始化用户角色列表1.控制层
jsp添加两个function 一个调出表单 一个调出角色列表
function grantRole(data) {
mainIndex = layer.open({
type:1,
title:"分配["+data.realName+"]角色",
area: ["1000px", "500px"],//窗口宽高
content: $("#selectUserRoleDiv"),//引用的内容窗口
btn:["确定","取消"],
yes:function(index,layero){
//选中行对象
var checkStatus = table.checkStatus('roleTable');
//定义数组,保存选中行的ID
var idArr = [];
//判断是否有选中行
if(checkStatus.data.length>0){
//获取选中行的数据
for (let i = 0; i < checkStatus.data.length; i++) {
idArr.push(checkStatus.data[i].id);//角色ID
}
//将数组转成字符串
var ids = idArr.join(",");
//发送请求(参数分别是角色ID,用户ID)
$.post("/admin/user/grantRole",{"ids":ids,"userId":data.id},function(result){
if(result.success){
layer.alert(result.message,{icon:1});
}else{
layer.alert(result.message,{icon:2});
}
},"json");
//关闭分配角色窗口
//layer.close(mainIndex);
}else{
layer.msg("请选择要分配的角色");
}
},
btn2:function(index,layero){
//关闭当前窗口
layer.close(index);
},
success:function () {
//初始化加载角色数据
initRoleData(data);
}
});
}
function initRoleData(data) {
table.render({
elem: '#roleTable',
url: '${pageContext.request.contextPath}/admin/role/initRoleListByUserId?userId='+data.id,
cols: [[
{type: "checkbox", width: 50},
{field: 'id', width: 100, title: '角色编号', align: "center"},
{field: 'roleCode', minWidth: 150, title: '角色编码', align: "center"},
{field: 'roleName', minWidth: 150, title: '角色名称', align: "center"},
{field: 'roleDesc', minWidth: 200, title: '角色描述', align: "center"},
]],
});
}
RoleController.java 查询两张表 一张是全部角色列表 一张是当前用户角色列表,然后循环遍历两个集合
@RequestMapping("/initRoleListByUserId")
public DataGridViewResult initRoleListByUserId(Integer userId){
//调用查询所有角色列表的方法
List
2.业务层
RoleService.java
List
RoleServiceImpl.java
public List
3.数据层
RoleMapper.java
@Select("select * from sys_role")
List
12.5.2.分配角色
1.控制层 UserController.java
@ResponseBody
@RequestMapping("/grantRole")
public String grantRole(String ids,Integer userId){
Map map = new HashMap();
if(userService.saveUserRole(ids,userId)){
map.put(SystemConstants.SUCCESS,true);
map.put(SystemConstants.MESSAGE,"角色分配成功");
}else{
map.put(SystemConstants.SUCCESS,false);
map.put(SystemConstants.MESSAGE,"角色分配失败");
}
return JSON.toJSONString(map);
}
2.业务层
SysUserService.java
boolean saveUserRole(String ids, Integer userId);
SysUserServiceImpl.java
public boolean saveUserRole(String ids, Integer userId) {
try {
//保存用户角色关系前,先将原有的关系清空
userMapper.deleteUserRoleByUserId(userId);
//将字符串ID拆分成数组
String[] split = ids.split(",");
for (int i = 0; i < split.length; i++) {
//调用保存用户角色关系的方法
userMapper.saveUserRole(Integer.valueOf(split[i]),userId);
}
return true;
} catch (Exception e) {
e.printStackTrace();
}
return false;
}
3.数据层 UserMapper.java
@Insert("insert into sys_user_role (uid,rid) values(#{userId},#{roleId})")
void saveUserRole(@Param("roleId") Integer roleId, @Param("userId") Integer userId);
12.6 获取当前登录用户
在之前的添加和修改用户,重置密码的时候,创建人默认为1,现在优化创建人的数据,将创建人设置为当前登录用户
12.6.1.数据层SysUserMapper.java 新增加一个根据用户名查询用户信息的方法
@Select("select * from sys_user where userName = #{userName}")
SysUser getUserByUserName(String userName);
12.6.2.业务层
SysUserService.java
SysUser getUserByUserName(String userName);
SysUserServiceImpl.java
public SysUser getUserByUserName(String userName) {
return userMapper.getUserByUserName(userName);
}
12.6.3.控制层
UserController.java 在添加和修改用户的方法中添加获取当前登录用户信息,
在重置密码的时候也要获取登录用户的id,所以重置密码的service层需要修改下对应的方法
对于普通用户在登录的时候不让他查出超级管理员的信息,在用户表中有一列userType列描述用户的状态信息,当=1时代表管理员;=2时代表普通用户(默认),所以当userType=2时就只能查看普通用户的信息。
在UserController.java的查询用户列表信息的方法中修改
1.直接在webapp下新添加一个403页面
403.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
HTTP 403 - 禁止访问-发生错误
HTTP 403 - 禁止访问-你所浏览的页面暂时无法访问
你可以返回上一页重试,或直接向我们反馈错误报告
2.修改 spring-security.xml
3.刷新hotel-manager
4.效果



