今日学习笔记
权限管理
实际上就是角色和菜单对应关系的展示。原理同角色管理和权限管理的servlet、dao、service等关系大致相同。
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);
Service和Impl中的实现方式和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());
用来实现用户登录时权限信息的存储和区分
浙公网安备 33010602011771号