今日学习笔记

权限管理

 

实际上就是角色和菜单对应关系的展示。原理同角色管理和权限管理的servletdaoservice等关系大致相同。

String[] menus = req.getParameterValues("roleMenu");

命名为RoleMenu。声明、关联对应好后,实现分页的方法就是复制粘贴。

 

与数据库的交互

列表中有相应的权限和菜单ID,根据角色权限查询菜单是否有对应已绑定的ID存在

Dao

List<Menu> queryMenusBy(String roleId) throws SQLException;

void save(RoleMenu roleMenu) throws SQLException;

void deleteRoleMenuBy(String roleId) throws SQLException;

Vo

package com.h.vo;

public class RoleMenu {

    private Integer roleId;
    private Integer menuId;

    public Integer getRoleId() {
        return roleId;
    }

    public void setRoleId(Integer roleId) {
        this.roleId = roleId;
    }

    public Integer getMenuId() {
        return menuId;
    }

    public void setMenuId(Integer menuId) {
        this.menuId = menuId;
    }
}

Impl

(快捷键Ctrl+I直接引入写好的方法)

查询

public List<Menu> queryMenusBy(String roleId) throws SQLException {
    StringBuffer sql = new StringBuffer(" select m.*, rm.menuId checkId from menuInfo m left join roleMenuInfo rm on rm.menuId = m.menuId and rm.roleId=");
    sql.append(roleId)
            .append(" order by m.menuId");
    System.out.println(sql.toString());
    List<Menu> list = new ArrayList<>();

 

这里的roleId传入的值可以直接定义其为String

SQL语句中的order by实现了排序的目的

public void save(RoleMenu roleMenu) throws SQLException {
    StringBuffer sql = new StringBuffer(" insert into roleMenuInfo(roleId, menuId) values(");
    sql.append(roleMenu.getRoleId())
            .append(",")
            .append(roleMenu.getMenuId())
            .append(")");

保存和删除

public void deleteRoleMenuBy(String roleId) throws SQLException {
    StringBuffer sql = new StringBuffer(" delete from roleMenuInfo where roleId=");
    sql.append(roleId);

 

点击按钮跳转至角色

返回时由于get到的MenuId可能为空,所以要添加一个条件判断

Object obj = rs.getObject("checkId");
if (obj != null) {
    m.setCheckId((Integer) obj);
}
list.add(m);

ServiceImpl中的实现方式和user一样

 

权限编辑页面

用隐藏域的方式实现表格打钩的形式

<input type="hidden" name="roleId" value="${roleId}">
<c:forEach items="${menuList}" var="m" >
    <input type="checkbox" name="roleMenu" value="${m.menuId}" <c:if test="${m.checkId !=null}">checked</c:if> /> ${m.menuName} <br>
</c:forEach>

 通过不同权限的账户登录,查询账户角色,再根据不同角色展现不同的菜单,从而实现账户权限的区分和管理

 

 

=======================================

Session原理

在用户登录时涉及到了session功能

Session:记录一系列状态

Session与cookie功能效果相同。Session与Cookie的区别在于Session是记录在服务端的,而Cookie是记录在客户端的

当访问服务器否个网页的时候,会在服务器端的内存里开辟一块内存,这块内存就叫做session,而这个内存是跟浏览器关联在一起的。

这个浏览器指的是浏览器窗口,或者是浏览器的子窗口,意思就是,只允许当前这个session对应的浏览器访问,就算是在同一个机器上新启的浏览器也是无法访问的

而另外一个浏览器也需要记录session的话,就会再启一个属于自己的session

 

我的项目里也用到了session方法

List<Menu> menus = menuService.queryMenusBy(user.getRoleId()+"");
req.getSession().setAttribute("menus", menus);
req.getSession().setAttribute("userId", user.getUserId());
req.getSession().setAttribute("userName", user.getUserName());

用来实现用户登录时权限信息的存储和区分

posted @ 2020-12-17 16:24  计算机语言学习日志  阅读(65)  评论(0)    收藏  举报