权限系统 拾遗
来源:互联网 发布:肩膀酸痛知乎 编辑:程序博客网 时间:2024/04/29 04:27
权限系统,其实并不是你想象中的那样高大上,说白了就是些DAO层处理嘛。无非加上了一点额外的处理,仅此而已。 下面我来分享一下,我在一个小项目中关于权限系统开发的一点收获。
- 项目依赖
- 数据库相关
- DAO层实现
- 工具包
- 过滤器
- 防中文乱码
- 权限处理
- 总结
项目依赖
本例是基于是数据库开发的Java Web项目,所需jar包如下:
数据库相关
建库: create database PrivilegeSystem用户表:create table user(id varchar(40) primary key,username varchar(100) not null,password varchar(100) not null);角色表:create table role(id varchar(40) primary key,name varchar(100) not null,description varchar(255));权限表:create table privilege(id varchar(40) primary key,name varchar(100) not null,description varchar(255));角色权限表:> create table role_privilege(> role_id varchar(40),> privilege_id varchar(40),> primary key(role_id,privilege_id),> constraint role_id_FK foreign key(role_id) references role(id),> constraint privilege_id_FK foreign key(privilege_id) references privilege(id)> );用户角色表: create table user_role( user_id varchar(40), role_id varchar(40), primary key(user_id,role_id), constraint user_id_FK foreign key(user_id) references user(id), # 这里使用了不一样的外键名称就是为了防止外键冲突 constraint role_id_FK1 foreign key(role_id) references role(id) );
DAO层实现
由于这里面代码忒多,贴出来阅读效果也不好,待会文末我会留出完整的项目代码。贴一下项目目录吧,方便大家理解。
工具包
这里我就写一个操作数据库时常用的工具类吧,那就是UUID的工具类,这样可以保证我们数据库里面数据的唯一性,方便主键的处理。
package utils;import java.util.UUID;/** * 创建出插入数据库的UUID工具类 * * @author Administrator * */public class WebUtils { public static String makeUUID() { return UUID.randomUUID().toString(); }}
过滤器
这里有两个过滤器都是比较常用的,一个是解决中文乱码的全局性质的过滤器。
防中文乱码
package web.filter;import java.io.IOException;import javax.servlet.Filter;import javax.servlet.FilterChain;import javax.servlet.FilterConfig;import javax.servlet.ServletException;import javax.servlet.ServletRequest;import javax.servlet.ServletResponse;public class CharacterEncoding implements Filter { @Override public void destroy() { // TODO Auto-generated method stub } @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { request.setCharacterEncoding("UTF-8"); response.setCharacterEncoding("UTF-8"); response.setContentType("text/html;charset=UTF-8"); chain.doFilter(request, response); } @Override public void init(FilterConfig arg0) throws ServletException { // TODO Auto-generated method stub }}
权限处理
package web.filter;import java.io.IOException;import java.util.HashMap;import java.util.List;import java.util.Map;import javax.servlet.Filter;import javax.servlet.FilterChain;import javax.servlet.FilterConfig;import javax.servlet.ServletException;import javax.servlet.ServletRequest;import javax.servlet.ServletResponse;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import domain.Privilege;import domain.User;import service.SecurityService;/** * 用于检测当前用户,拥有哪些权限,这是此项目的核心 * * @author Administrator * */public class CheckPrivilegeFilter implements Filter { /** * 模拟数据库中存储的访问资源所对应的权限 * * <br> * 思路就是使用过滤器方式对要访问的资源进行过滤。拥有相关的权限的才可以正常的访问。 */ public static Map<String, Privilege> map = new HashMap<String, Privilege>(); static { Privilege add_p = new Privilege(); add_p.setName("add"); Privilege delete_p = new Privilege(); delete_p.setName("delete"); Privilege find_p = new Privilege(); find_p.setName("find"); map.put("URI_add", add_p); map.put("URI_delete", delete_p); map.put("URI_find", find_p); } @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { HttpServletRequest req = (HttpServletRequest) request; HttpServletResponse res = (HttpServletResponse) response; // 得到用户请求的URI资源定位 String uri = req.getRequestURI(); // 得到用户带有的自身的权限 Privilege p = map.get(uri); // 处理权限问题。如果访问资源需要的权限为空,则放行,否则只有拥有相关权限的用户才能正常的访问该资源 if (p == null) { chain.doFilter(request, response); return; } // 需要权限的话,则检查用户是否登陆,未登录则提示用户先登录 User user = (User) req.getSession().getAttribute("user"); if (user == null) { request.setAttribute("message", "请先登录!"); request.getRequestDispatcher("/message.jsp").forward(request, response); return; } // 若用户已登录,则获取该用户拥有的所有的权限,然后 SecurityService service = new SecurityService(); List<Privilege> userPrivileges = service.getUserAllPrivilege(user.getId()); // 判断用户拥有的权限中是否包含资源访问需要的权限 if (!userPrivileges.contains(p)) { request.setAttribute("message", "对不起,你的权限无法访问当前资源!"); request.getRequestDispatcher("/message.jsp").forward(request, response); return; } // 拥有全部权限,正常的访问资源 chain.doFilter(request, response); } @Override public void destroy() { // TODO Auto-generated method stub } @Override public void init(FilterConfig arg0) throws ServletException { // TODO Auto-generated method stub }}
总结
项目中有很多在开发中用得到的技术和经验,也比较适合新人练手。如果有兴趣,下面是完整的项目文件。
权限系统-完整源码
1 0
- 权限系统 拾遗
- 拾遗
- 拾遗
- html拾遗第2天,页面上进行权限控制
- 权限系统
- 权限系统
- 权限系统
- 系统权限
- 系统权限
- 权限系统
- 系统权限
- 系统权限
- 系统权限
- 系统权限
- 系统权限
- 权限系统
- 系统权限
- 系统权限
- 自己写的博客网站上线了
- 课堂笔记2016.8.4
- POJ 1364 King(差分约束)
- 数据结构之快速排序的Java实现
- 【记录】kernel打补丁,编译
- 权限系统 拾遗
- ffmpeg中的sws_scale算法性能测试
- LoadRunner常用知识点-----LoadRunner日志输出
- 回顾Hadoop二次排序
- 2038: [2009国家集训队]小Z的袜子(hose) (莫队算法)
- 初学linux设备驱动遇到的编译和操作问题解决
- 课堂笔记2016.8.5
- clone学习
- CSV操作(导出和导入)