filter、批量删除和权限管理

本文介绍了在Java Web开发中如何使用Filter进行登录拦截,实现批量删除用户的功能,以及详细阐述了权限管理的实现过程,包括在MySQL中设计数据库表,定义相关 Dao、Mapper、Service 和 Controller,以及实现添加角色的交互流程。

Filter登录拦截

  1. 继承Filter接口并实现doFilter()方法

    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();
            System.out.println("uri:   " + uri);
            System.out.println("uri.indexOf:   " + uri.indexOf("login.do"));
            if (user == null && uri.indexOf("login.do") == -1) {
                response.sendRedirect(request.getContextPath() + "../login.jsp");
            } else {
                filterChain.doFilter(request, response);
            }
        }
    
        @Override
        public void destroy() {
    
        }
    
    }
    
  2. web.xml中注册并映射Filter

    <filter>
      <filter-name>loginFilter</filter-name>
      <filter-class>com.llanero.Filter.LoginFilter</filter-class>
    </filter>
    <filter-mapping>
      <filter-name>loginFilter</filter-name>
      <url-pattern>*.do</url-pattern>
    </filter-mapping>
    

批量删除

  1. mapper\UserMapper.xmlcom.llanero.dao.UserDao中定义批量删除用户的SQL语句和方法

    <delete id="deleteAll" parameterType="list">
        delete from ssm_user where id in
        <foreach collection="ids" item="id" open="(" close=")" separator=",">
            #{id}
        </foreach>
    </delete>
    
    void deleteAll(@Param("ids") List<Integer> ids);
    
  2. com.llanero.service.impl.UserServiceImpl中调用com.llanero.dao.UserDao提供的deleteAll方法

    @Override
    public void deleteAll(List<Integer> ids) {
        userDao.deleteAll(ids);
    }
    
  3. webapp\pages\user-list.jsp中定义deleteAll()方法并提交post

    			function deleteAll() {
    				var checkedNum=$("input[name='ids']:checked").length;
    				alert(checkedNum);
    				if(checkedNum==0){
    					alert("请至少选择一个进行删除!!!");
    					return;
    				}
    				if(confirm("确认要删除这些用户吗?")){
    					var userList=new Array();
    					$("input[name='ids']:checked").each(
    							function () {
    								userList.push($(this).val())
    							}
    					);
    					alert(userList);
    					$.ajax({
    						type:"post",
    						url: "${pageContext.request.contextPath}/user/deleteAll.do",
    						data:{userList:userList.toString()},
    						success:function () {
    							alert("删除成功");
    							location.reload();
    
    						},
    						error:function () {
    							alert("删除失败");
    						}
    					});
    				}
    			}
    
  4. com.llanero.controller.UserController中的deleteAll方法调用UserService提供的方法响应请求,完成删除

    @RequestMapping("deleteAll.do")
    public String deleteAll(String userList) {
        System.out.println("userList:   " + userList);
        String[] str = userList.split(",");
        List<Integer> ids = new ArrayList<>();
        for (String s : str) {
            ids.add(Integer.parseInt(s));
        }
        userService.deleteAll(ids);
        return "redirect:findAll.do";
    }
    

权限管理

  1. 在MySQL中设计ssm_role表和user_role表
    2
    3

  2. 定义相应RoleDao、RoleMapper.xml、RoleService、RoleServiceImpl、bean.Role、bean.UserRole等类和文件

    RoleMapper.xml相关SQL语句

        <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 ssm_role where id not in (select roleId from user_role where userId=#{id})
        </select>
    <!--先根据userId在user_role表中查找roleId  在ssm_role表中查找role记录,该用户没在-->
        <insert id="addRole" parameterType="userRole">
            insert into user_role (userId,roleId) values (#{userId},#{roleId})
        </insert>
    

    RoleServiceImpl相关方法

    @Service
    public class RoleServiceImpl implements RoleService {
    
        @Autowired
        private RoleDao roleDao;
    
        @Override
        public List<Integer> findRoleId(int userId) {
            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);
            }
        }
    }
    
  3. user-list.jsp中添加相应代码,实现添加角色按钮和功能,并添加user-role-add.jsp,实现添加角色界面

    <% List<Integer> roleIds = (List<Integer>) session.getAttribute("roleIds");%>
    <% if (roleIds.contains(1)){ %>
    	<a href="/user/toAddRole.do?id=${user.id}">添加角色</a>
    <% } %>
    
  4. 在UserController中定义public ModelAndView toAddRolepublic String add方法,实现界面的添加角色请求

    @RequestMapping("toAddRole.do")
    public ModelAndView toAddRole(int id) {
        List<Role> roleList = roleService.findRoleByUserId(id);
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.addObject("roles", roleList);
        modelAndView.addObject("id", id);
        modelAndView.setViewName("user-role-add");
        return modelAndView;
    }
    
    @RequestMapping("addRole.do")
    @ResponseBody
    public String add(String roleList, String userId) {
        String[] strings = roleList.split(",");
        List<Integer> ids = new ArrayList<>();
        for (String s : strings) {
            ids.add(Integer.parseInt(s));
        }
        roleService.add(ids, userId);
        return "";
    }
    

roleList.split(",");
List ids = new ArrayList<>();
for (String s : strings) {
ids.add(Integer.parseInt(s));
}
roleService.add(ids, userId);
return “”;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值