DAY5 SSM项目-批量删除、拦截和用户权限功能开发

1 批量删除
效果预览
在之前开发的基础上可以在jsp界面中看到有多选框和是删除按钮,批量删除的功能就是在多选框下选择好待处理的用户信息,进行批量删除实现。
在这里插入图片描述
在这里插入图片描述
功能实现:
(1) 在userDao下声明一个批量删除的接口,并传入一个List集合

//批量删除
void deleteAll(@Param(“ids”)List ids);
1
2
(2) 在UserMapper中声明一个批量删除的sql语句,遍历集合中的每个元素

delete from user_ssm where id in #{id}

(3) 在Service中调用dao中接口
同样现在Service中声明一个接口

void deleteAll(List ids);
1
再在impl中实现该接口并调用dao接口

@Override
public void deleteAll(List ids) {
userDao.deleteAll(ids);
}

在jsp部分,先将所有获取到的选择框的id先保存到一个数组userList中,再将该数组转为String类型通过ajax传到后端,所以后端接收到的数据为一个字符串类型,(例如{1,2,3,4})
user-list.jsp 删除多项部分

function deleteAll() {
var checkedNum=$(“input[name=‘ids’]:checked”).length;
alert(checkedNum);
if(checkedNum==0){
alert(“请至少选择一个进行删除!!!”);
return;
}
if(confirm(“确认要删除这些用户吗?”)){
var userList=new Array();
KaTeX parse error: Expected '}', got 'EOF' at end of input: … userList.push((this).val())
}
);
alert(userList);
KaTeX parse error: Expected '}', got 'EOF' at end of input: …ost", url: "{pageContext.request.contextPath}/user/deleteAll.do",
data:{userList:userList.toString()},
success:function () {
alert(“删除成功”);
location.reload();
},
error:function () {
alert(“删除失败”);
}
});
}
}

在controller对接收到的字符串先进行分割处理,再遍历添加进集合中

//删除多项
@RequestMapping("/deleteAll.do")
public String deleteAll(String userList){
String[] str = userList.split(",");
List ids = new ArrayList<>();
for(String s:str){
ids.add(Integer.parseInt(s));
}
userService.deleteAll(ids);
return “redirect:findAll.do”;
}

最后运行得到批量删除的效果

关于ajax内容
ajax 通过在后台与服务器进行少量数据交换,使网页实现异步更新。这意味着可以在不重载整个页面的情况下,对网页的某些部分进行更新。传统的网页(不使用 AJAX)如果需要更新内容,必须重载整个页面。
因此再本页面中,当批量删除数据时,只会更新用户信息不会对网页进行重载。
JQ对ajax进行了封装,我们只需要了解如何使用ajax即可

KaTeX parse error: Expected '}', got 'EOF' at end of input: …"post", url: "{pageContext.request.contextPath}/user/deleteAll.do",
data:{userList:userList.toString()},
success:function () {
alert(“删除成功”);
location.reload();
},
error:function () {
alert(“删除失败”);
}
});

其中:
type:数据的提交方式
url:数据的提交url
data:提交的数据
dataType:服务器返回数据的类型,例如xml,String,Json等
success:请求成功后的回调函数
error:请求失败后的回调函数

2 Filter拦截器
使用Filter可以对用户请求进行预处理和HttpServletResponse进行后处理,在本项目中主要用于拦截未登录状态直接访问后续界面

(1)修改controller,在login方法处用户登陆验证成功时,将用户信息存入session 的 ‘user’ 字段中

public ModelAndView login(User user,HttpSession session){
int id = userService.login(user.getUsername(),user.getPassword());

ModelAndView mv = new ModelAndView();
if(id != -1){
     List<Integer> roleIds = roleService.findRoleId(id);
     session.setAttribute("roleIds",roleIds);
     session.setAttribute("user",user);  //存入user
     mv.setViewName("main");
}else{
 	mv.setViewName("../failer");
}
return mv;

}

(2)新建filter拦截器
在和controller包同级的目录下新建一个filter文件夹,在filter下新建一个loginFilter.java文件,实现Filter接口。

public class loginFilter implements Filter {
//生命周期 初始化 -> 实现 -> 销毁

@Override
public void init(FilterConfig filterConfig) throws ServletException {
}

@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
    HttpServletRequest request = (HttpServletRequest) servletRequest;      //请求体
    HttpServletResponse response = (HttpServletResponse) servletResponse;   //响应体
    HttpSession session = request.getSession();  //用户发送的请求
    User user = (User) session.getAttribute("user");
    String uri = request.getRequestURI();
    if(user==null && uri.indexOf("login.do")==-1){  //验证失败的情况  在没有用户且不是登陆界面的情况下 跳转到login
        response.sendRedirect(request.getContextPath()+"../login.jsp");
    }else{
        filterChain.doFilter(request,response);     //验证成功 继续往下验证(往下有的话)
    }
}

@Override
public void destroy() {

}

}

在doFilter中提取到之前存入session的user值,并联合当前路由进行判断,当user为空并且路由不含login.do时,默认跳转到登陆界面,否则放行

在配置好controller和filter之后还需要到web.xml配置文件中配置启动过滤器,在filter-mapping中的url-pattern即拦截的路径

loginFilter com.tengshan.filter.loginFilter loginFilter *.do

达到的效果即在未登录状态下拦截所有的.do路径,默认跳转到登陆界面

3 用户权限功能
该部分主要给用户设置管理员等权限操作,目前只能通过数据库先指定用户权限,再在界面中更具用户权限使用不同的功能,在界面给用户添加权限功能待开发。
(1)新建数据库关系映射
在mysql中ssm库下新建数据表role_ssm和user_role,分别用于储存角色种类和用户角色关系映射。表结构如下
在这里插入图片描述
在这里插入图片描述
(2)新建实体类
在实体类中按照数据库中信息新建实体类
Role.java
public class Role {
private int id;
private String rolename;//名称
private String roledesc;//描述

public int getId() {
    return id;
}

public void setId(int id) {
    this.id = id;
}

public String getRolename() {
    return rolename;
}

public void setRolename(String rolename) {
    this.rolename = rolename;
}

public String getRoledesc() {
    return roledesc;
}

public void setRoledesc(String roledesc) {
    this.roledesc = roledesc;
}

}
UserRole.java
public class Role {
private int id;
private String rolename;//名称
private String roledesc;//描述

public int getId() {
    return id;
}

public void setId(int id) {
    this.id = id;
}

public String getRolename() {
    return rolename;
}

public void setRolename(String rolename) {
    this.rolename = rolename;
}

public String getRoledesc() {
    return roledesc;
}

public void setRoledesc(String roledesc) {
    this.roledesc = roledesc;
}

}
(3)新建Dao接口
在dao目录下新建一个专门用于Role的RoleDao,声明接口方法
public interface RoleDao {
//根据userid查找roleid
List findRoleIdByUserId(int userId);
//根据userid查找role
List findRoleByUserId(int id);
//添加role
void addRole(UserRole userRole);
}
(4)新建Mapper
新建了一个RoleDao同样也需要新建一个RoleMapper来声明sql语句

<?xml version="1.0" encoding="UTF-8" ?>
<select id="findRoleIdByUserId" parameterType="int" resultType="int">
    select roleId from user_role where userId=#{userId}
</select>

<select id="findRoleByUserId" parameterType="int" resultType="role">
    select * from role_ssm where id not in (
        select roleId from user_role where userId=#{id}
    )
</select>

<insert id="addRole" parameterType="userRole">
    insert into user_role (userId,roleId) values (#{userId},#{roleId})
</insert>
(5)新建Service 新建一个RoleService接口声明接口方法(和dao中一样) public interface RoleService {
List<Integer> findRoleId(int userId);

List<Role> findRoleByUserId(int id);

void add(List<Integer> ids,String userId);

}
再声明一个RoleServiceImpl来调用dao中的接口方法使用sql语句
@Service
public class RoleServiceImpl implements RoleService {

@Autowired
private RoleDao roleDao;

@Override
public List<Integer> findRoleId(int userId) {
    System.out.println(roleDao.findRoleIdByUserId(userId).toString()+"impl中");
    return roleDao.findRoleIdByUserId(userId);
}

@Override
public List<Role> findRoleByUserId(int id) {
    return roleDao.findRoleByUserId(id);
}

@Override
public void add(List<Integer> ids, String userId) {
    for(int roleId:ids){
        UserRole userRole = new UserRole();
        userRole.setUserId(Integer.parseInt(userId));
        userRole.setRoleId(roleId);
        roleDao.addRole(userRole);
    }
}

}
(6)修改UserController
修改
//角色绑定
@RequestMapping(“toAddRole.do”)
public ModelAndView toAddRole(int id){
List roleList = roleService.findRoleByUserId(id);
ModelAndView mv = new ModelAndView();
mv.addObject(“roles”,roleList);
mv.addObject(“id”,id);
mv.setViewName(“user-role-add”);
return mv;
}

@RequestMapping(“addRole.do”)
@ResponseBody
public String add(String roleList,String userId){
String[] strs = roleList.split(",");
List ids = new ArrayList<>();
for(String s:strs){
ids.add(Integer.parseInt(s));
}
roleService.add(ids,userId);
return “”;
}
目前添加角色部分功能还未完善,仅仅实现查看当前可添加的角色
(6)修改jsp文件
修改jsp部分仅仅添加一个button到界面中实现跳转到添加角色界面,该button仅在管理员权限下的user才能查看,普通用户不能进行该操作,但添加角色功能尚未完成。
在user-list.jsp下

更新 删除 <% List roleIds = (List) session.getAttribute("roleIds");%> <% System.out.println("调试在这里"+roleIds.contains(1));%> <% System.out.println(roleIds.toString());%> <% if (roleIds.contains(1)){ %> 添加角色 <% } %> 效果图 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20200728210443342.png)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值