JavaWeb学习记录(二十五)——权限管理总结
一、面向对象思想简化数据库操作
public List<Role> getObjectsByIds(List<AdminRole> adminRoles) {
List<Role> roles=new ArrayList<Role>();
for(AdminRole ar:adminRoles){
roles.add(findById(ar.getRole().getId()));
}
return roles;
}
等同于:
private List<Role> tests(List<AdminRole> adminRoles){
if(adminRoles!=null){
StringBuffer sb=new StringBuffer();
int len=adminRoles.size();
sb.append("(");
for(int i=0;i<len;i++){
AdminRole ar=adminRoles.get(i);
System.out.println(ar.getId()+"---------------"+ar.getRole().getId());
if(i==0){
sb.append(ar.getRole().getId());
}else{
sb.append(","+ar.getRole().getId());
}
}
sb.append(")");
System.out.println(sb.toString());
String sql="select id,name,description from role where id in "+sb.toString();
return jdbcTemplate.query(sql,new RowMapper<Role>(){
@Override
public Role mapRow(ResultSet rs, int arg1)
throws SQLException {
Role role=new Role();
role.setId(rs.getInt("id"));
role.setName(rs.getString("name"));
role.setDescription(rs.getString("description"));
return role;
}});
}else{
return null;
}
}
二、选择授予角色的操作
if("grant".equals(oper)){
String aid=request.getParameter("aid");
Integer id=Integer.valueOf(aid);
Admin admin=adminService.findById(id);
//查询用户对应的角色信息
List<Role> adminRoles=roleService.getObjectsByIds(adminRoleService.getObjectsByAid(id));
//查询系统角色
List<Role> roles=roleService.getObjects();
request.setAttribute("admin", admin);//存储用户信息
request.setAttribute("adminRoles", adminRoles);//存储用户角色信息
request.setAttribute("roles", roles);//存储系统角色信息
request.getRequestDispatcher("./user/admin_role.jsp").forward(request, response);
}
三、授予角色过程
if("role".equals(oper)){
String aid=request.getParameter("aid");
int id=Integer.valueOf(aid);
List<AdminRole> adminRoles=adminRoleService.getObjectsByAid(id);
//创建一个集合,存储该用户已存在的角色值
List<Integer> lids=new ArrayList<Integer>();
if(adminRoles!=null){
for(AdminRole ar:adminRoles){
lids.add(ar.getId());
}
}
//获取用户新赋予的角色值
String[] rids=request.getParameterValues("rids");
if(rids!=null&&rids.length>0){
for(int i=0;i<rids.length;i++){
int rid=Integer.parseInt(rids[i]);
if(lids.contains(rid)){
System.out.println("已经存在就不处理");
lids.remove(rid);
}else{
//第一种情况,数据库本身没有
Admin admin=new Admin();
admin.setId(id);
Role role=new Role();
role.setId(rid);
adminRoleService.insertObject(new AdminRole(admin, role));
}
}
//把没有赋予的角色,但本来存在的角色删除掉
if(lids.size()>0){
for(Integer did:lids){
adminRoleService.deleteObjectById(did);
}
}
}else{
//如果为null,说明该用户不再被赋予角色
//判断已有角色是否为空
if(adminRoles!=null){
for(AdminRole ar:adminRoles){
adminRoleService.deleteObjectById(ar.getId());
}
}
}
request.getRequestDispatcher("./admin.do?oper=select").forward(request, response);
}
JavaWeb学习记录(二十五)——权限管理总结的更多相关文章
- javaweb学习总结(二十五)——jsp简单标签开发(一)
一.简单标签(SimpleTag) 由于传统标签使用三个标签接口来完成不同的功能,显得过于繁琐,不利于标签技术的推广, SUN公司为降低标签技术的学习难度,在JSP 2.0中定义了一个更为简单.便于编 ...
- javaweb学习总结二十五(response对象的用法一)
一:Reponse对象的概念 当客户端发送http请求时,服务器端会对每一次请求,创建request对象和response对象. response对象包括三个部分:响应头.响应状态码以及响应体 二:r ...
- JavaWeb学习记录(十五)——浏览器Cookie禁用后的处理
IE禁用Cookie方式:
- 学习笔记:CentOS7学习之二十五:shell中色彩处理和awk使用技巧
目录 学习笔记:CentOS7学习之二十五:shell中色彩处理和awk使用技巧 25.1 Shell中的色彩处理 25.2 awk基本应用 25.2.1 概念 25.2.2实例演示 25.3 awk ...
- python3.4学习笔记(二十五) Python 调用mysql redis实例代码
python3.4学习笔记(二十五) Python 调用mysql redis实例代码 #coding: utf-8 __author__ = 'zdz8207' #python2.7 import ...
- Linux学习之CentOS(十五)----磁盘管理之 启动挂载(转)
启动挂载 /etc/fstab 及 /etc/mtab 刚刚上面说了许多,那么可不可以在启动的时候就将我要的文件系统都挂好呢?这样我就不需要每次进入 Linux 系统都还要在挂载一次呀!当然可以啰!那 ...
- JavaWeb学习记录(十二)——商城购物之数据库操作的接口定义
一.基本接口,该项目中所有接口都继承它 package blank.dao; import java.util.List; public interface BaseDao<T,PK> { ...
- javaweb学习总结(四十五)——监听器(Listener)学习二
一.监听域对象中属性的变更的监听器 域对象中属性的变更的事件监听器就是用来监听 ServletContext, HttpSession, HttpServletRequest 这三个对象中的属性变更信 ...
- JMeter学习(二十五)HTTP属性管理器HTTP Cookie Manager、HTTP Request Defaults
Test Plan的配置元件中有一些和HTTP属性相关的元件:HTTP Cache Manager.HTTP Authorization Manager.HTTP Cookie Manager.HTT ...
- Javaweb学习笔记——(十五)—————— sql复习
sql复习 数据库管理系统(DBMS)的概述 1.什么是DBMS:数据的仓库 *方便查询 *可存储的数据量大 *保证数据的完整.一致 *安全可靠 2.DBMS的发展:今天主流数据库为关系型数据库管理系 ...
随机推荐
- Python中的random模块
Python中的random模块用于生成随机数.下面介绍一下random模块中最常用的几个函数. random.random random.random()用于生成一个0到1的随机符点数: 0 < ...
- vue js 用nodejs的依赖包 --2016-08-23
今天被nodejs包依赖坑了一下,上次上传的项目突然运行不起来了,原来是package.json中定义了使用最新版本的依赖,而最新版本有可能调整了结构或者改了api,比如vux把flexbox-it ...
- 使用OCI向Oracle插入Geometry数据
使用C/C++操作Oracle数据库,使用OCI可谓是最强大,当然也是最难的方式.Oracle是一个功能复杂而强大的数据库,它可以很好的支持空间数据(Oracle spatial).如何使用OCI向O ...
- ubuntu 添加源
edit file : /etc/apt/sources.list add: deb http://mirrors.163.com/ubuntu/ intrepid main restricted ...
- Matlab与C/C++联合编程之Matlab以MEX方式调用C/C++代码(一)
MEX文件是一种可在matlab环境中调用的C语言(或fortran)衍生程序,mex的编译结果实际上就是一个带输出函数mexFunction 的dll文件. 中文名 mex文件 外文名 MATLAB ...
- Hadoop 重启各个节点
对于datanode可以在master中配置,然后在maste启动的时候,一并去启动这些节点 .对于死掉的节点,也可以通过以下命令启动 .重启挂掉的节点进入到 挂掉的机器 bin/hadoop-dae ...
- swift语言之多线程操作和操作队列(上)———坚持51天吃掉大象
欢迎有兴趣的朋友,参与我的美女同事发起的活动<51天吃掉大象>,该美女真的很疯狂,希望和大家一起坚持51天做一件事情,我加入这个队伍,希望坚持51天每天写一篇技术文章.关注她的微信公众号: ...
- ajax 请求超过了5s 还没有返回 的话 就自动取消
ajax请求时有个参数可以借鉴一下 var ajaxTimeOut = $.ajax({ url:'', //请求的URL timeout : 1000, //超时时间设置,单位毫秒 type : ' ...
- Image Generator (Image Builder)
如果你想要下载一个预编译好的镜像文件,或者想要尝试整个编译过程,一个替代方案是使用镜像生成器(Image Generator)(以前被叫做Image Builder).这是一个预编译好的OpenWrt ...
- Security Checklist (路由器安全checklist)
Security Checklist Website by Michael Horowitz Home | Introduction | Router Bugs | Security Che ...