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的发展:今天主流数据库为关系型数据库管理系 ...
随机推荐
- 【STL】-auto_ptr的用法
初始化: #include<memory> //auto_ptr header void f() { auto_ptr<classA> ptr(new classA); } 拷 ...
- Linux-设置环境变量
一般来说,配置交叉编译工具链的时候需要指定编译工具的路径,此时就需要设置环境变量.例如我的mips-linux-gcc编译器在“ /opt/au1200_rm/build_tools/bin”目录下, ...
- opencv实现图片缩放
源码 #include <iostream> #include <opencv2/core/core.hpp> #include <opencv2/imgproc/img ...
- 100个iOS开发/设计面试题汇总
常见问题 你昨天/这周学习了什么? 你为什么热衷于软件开发? 你对哪一种控制系统比较熟悉? 是否参与过GitHub项目? 是否参与过GitHub或其他同类型网站的iOS开源项目? 请描述一下你的iOS ...
- 破解Xamarin
试用了一阵子Mono For Android,今天到期了,,囊中羞涩,只好破解. 说是要在vs2013的英文界面下运行破解包,不知道是真是假,下载并安装了一个. 然后又下载了破解包.是个名为xa.ra ...
- java应用程序和虚拟机实例之间的关系
每一个java程序都会产生一个java虚拟机的实例.并不是说一个物理机上,运行多个java应用程序就只有一个java虚拟机实例,多少个java应用程序就有多少个java虚拟机实例.
- stm32的软件架构问题
1. 架构组成:程序代码分为四种结构a) 顺序执行代码定义:按照顺序逐行执行的代码优点:是思路简单,代码可靠不易被干扰.缺点:占用资源用途:只用来各种变量.函数的定义,硬件的初始化程序位置:main. ...
- Canopy使用教程 (2)
1.下载https://reputation.alienvault.com/reputation.data alienvault公司的IP信誉数据库文件到本地,手动或者wget 2.使用 read_c ...
- 5月18日:top10面试算法-LRUcache的实现
问题描述: LRU算法:优先把那些最长时间没使用的对象置换掉.根据数据的历史访问记录来进行淘汰数据,其核心思想是“如果数据最近被访问过,那么将来被访问的几率也更高”. JAVA实现: 测试: publ ...
- Ubuntu 14.10 下设置静态IP
修改 /etc/network/interfaces 文件 sudo nano /etc/network/interfaces 修改为 # 前面的不变auto eth0 iface eth0 inet ...