文章目录

  • 效果展示
  • 一、OA办公系统简介
  • 二、RBAC模型介绍
  • 三、使用powerdesigner建模
  • 四、项目搭建
  • 五、部分代码
    • (1)登录页面
    • (2)登录处理/优化servlet
    • (3)top部分
    • (4)left部分
    • (5)异常/强制登录过滤器
  • 六、给出项目完整文件

效果展示

员工管理OA

一、OA办公系统简介

办公自动化(Office Automation,简称OA),是为了提高工作效率,实现无纸办公,而开发的标准软件。通常医院、超市、园区、物流、校园等,都使用OA。

二、RBAC模型介绍

RBAC 是基于角色的访问控制模型(Role-Based Access Control )在 RBAC 中,权限与角色相关联,用户通过成为适当角色的成员而得到这些角色的权限。这样管理都是层级相互依赖的,权限赋予给角色,而把角色又赋予用户,简化了权限的管理,管理起来更方便。

RBAC实际上是基于五张表的模型。用户表角色表权限表用户角色表角色权限表。不同的用户登录,拥有不同的角色,而不同的角色又有不同的权限。

三、使用powerdesigner建模


生成的sql语句rbac.sql

/*==============================================================*/
/* DBMS name:      MySQL 5.0                                    */
/*==============================================================*/drop table if exists privilege;drop table if exists role;drop table if exists role_pri;drop table if exists user;drop table if exists user_role;/*==============================================================*/
/* Table: privilege                                             */
/*==============================================================*/
create table privilege
(priid                int not null auto_increment,priname              varchar(20) not null,priurl               varchar(55),pid                  int,primary key (priid)
);/*==============================================================*/
/* Table: role                                                  */
/*==============================================================*/
create table role
(roleid               int not null auto_increment,rolename             varchar(20) not null,primary key (roleid)
);/*==============================================================*/
/* Table: role_pri                                              */
/*==============================================================*/
create table role_pri
(roleid               int not null,priid                int not null
);/*==============================================================*/
/* Table: user                                                  */
/*==============================================================*/
create table user
(userid               int not null auto_increment,username             varchar(20) not null,password             varchar(6) not null,primary key (userid)
);/*==============================================================*/
/* Table: user_role                                             */
/*==============================================================*/
create table user_role
(userid               int not null,roleid               int not null
);/*----------------------------------------------------------------*/
INSERT INTO user(username,PASSWORD) VALUES("admin","admin");
INSERT INTO user(username,PASSWORD) VALUES("user1","user1");
INSERT INTO role(rolename) VALUES("管理员");
INSERT INTO role(rolename) VALUES("普通用户");
INSERT INTO user_role(userid,roleid) VALUES(1,1);
INSERT INTO user_role(userid,roleid) VALUES(2,2);
INSERT INTO privilege(priname,priurl,pid) VALUES("员工管理","emp管理",null);
INSERT INTO privilege(priname,priurl,pid) VALUES("添加管理","addEmp.jsp",1);
INSERT INTO privilege(priname,priurl,pid) VALUES("查询管理","listEmp.jsp",1);
INSERT INTO privilege(priname,priurl,pid) VALUES("用户管理","user管理",NULL);
INSERT INTO privilege(priname,priurl,pid) VALUES("添加管理","addUser.jsp",4);
INSERT INTO privilege(priname,priurl,pid) VALUES("查询管理","queryUser.jsp",4);
-- admin的权限
INSERT INTO role_pri(roleid,priid) VALUES(1,1);
INSERT INTO role_pri(roleid,priid) VALUES(1,2);
INSERT INTO role_pri(roleid,priid) VALUES(1,3);
INSERT INTO role_pri(roleid,priid) VALUES(1,4);
INSERT INTO role_pri(roleid,priid) VALUES(1,5);
INSERT INTO role_pri(roleid,priid) VALUES(1,6);
-- 普通员工的权限
INSERT INTO role_pri(roleid,priid) VALUES(2,1);
INSERT INTO role_pri(roleid,priid) VALUES(2,3);
INSERT INTO role_pri(roleid,priid) VALUES(2,4);
INSERT INTO role_pri(roleid,priid) VALUES(2,6);

四、项目搭建


五、部分代码

(1)登录页面

login.jsp

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<% String path=request.getContextPath(); %><html><head><meta http-equive="content-type" content="text/html;charset=utf-8"/><script type="text/javascript" src="js/jquery-1.8.3.min.js"></script><script type="text/javascript">function login(){var username=$("input[name='username']").val();var password=$("input[name='password']").val();//发起Ajax请求到login.do$.ajax({url:"login.do",type:"post",data:'username='+username+'&password='+password,success:function(data){if(data=='success'){//登录成功,打开展示页面location.href="<%=path%>/pages/index.jsp";}else{//登录失败alert(data);}}});}</script></head><bodystyle="margin-top:200px;font-size:30px"><h3 align="center">登录页面</h3><form action="login.do" method="post" align="center">用户名:<input type="text" name="username"/><br/><br/>&nbsp;&nbsp;&nbsp;码:<input type="password" name="password"/><br/><br/><input type="button" value="登录" onclick="login();"/></form></body>
</html>

(2)登录处理/优化servlet

ActionServlet.java

package web;import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;import service.UserService;
import service.UserServiceImpl;import dao.EmpDao;
import dao.EmpDaoImpl;
import entity.Emp;
/*** 类说明:*      优化合并Servlet* * @author qianliangguo*/
public class ActionServlet extends HttpServlet {EmpDao empDao = new EmpDaoImpl();UserService userService = new UserServiceImpl();@Overrideprotected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//设置获得请求参数的解码方式request.setCharacterEncoding("utf-8");response.setContentType("text/html;charset=utf-8");PrintWriter out = response.getWriter();//获取请求资源路径/ems/addEmp.doString url = request.getRequestURI();//切分url地址  保留addEmpString uri = url.substring(url.lastIndexOf("/")+1, url.lastIndexOf("."));if(uri.equals("queryEmp")){/** 查询*///查询所有员工记录List<Emp> list = empDao.queryAllEmp();        //将员工记录保存到request作用域中request.setAttribute("employees", list);//转发到listEmp.jsprequest.getRequestDispatcher("/pages/listEmp.jsp").forward(request, response);}else if(uri.equals("loadEmp")){/** 加载*///依旧想要修改的id,查询这个员工原有信息String id = request.getParameter("id");Emp emp = empDao.selectEmpById(Integer.parseInt(id));//将员工信息保存到request作用域,转发到一个修改表单的页面request.setAttribute("employee", emp);request.getRequestDispatcher("/pages/loadEmp.jsp").forward(request, response);}else if(uri.equals("updateEmp")){/** 修改*///获得修改之后的Emp信息String id = request.getParameter("id");String name = request.getParameter("name");String salary = request.getParameter("salary");String age = request.getParameter("age");Emp emp = new Emp(Integer.parseInt(id),name,Double.parseDouble(salary),Integer.parseInt(age));//修改用户信息empDao.updateEmp(emp);//修改成功后重定向到所有员工列表queryEmpresponse.sendRedirect("queryEmp.do");}else if(uri.equals("addEmp")){/** 添加*/      String name = request.getParameter("name");String salary = request.getParameter("salary");String age = request.getParameter("age");Emp emp = new Emp(null,name,Double.parseDouble(salary),Integer.parseInt(age));empDao.addEmp(emp);//添加成功,重定向到queryEmp中response.sendRedirect("queryEmp.do");}else if(uri.equals("deleteEmp")){/** 删除*/String id = request.getParameter("id");empDao.deleteEmp(Integer.parseInt(id));//删除成功后重定向到员工列表response.sendRedirect("queryEmp.do");}else if(uri.equals("login")){/** 登录*///获得客户端过来的账户和密码String username  = request.getParameter("username");String password = request.getParameter("password");String loginRS = userService.login(request,username,password);//将loginRS登录结果字符串返回到jspout.write(loginRS);}else if(uri.equals("logout")){//清除sessionrequest.getSession().invalidate();}}
}

(3)top部分

top.jsp

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%String path=request.getContextPath();%>><html><head><meta http-equive="content-type" content="text/html;charset=utf-8"/><script type="text/javascript" src="<%=path%>/js/jquery-1.8.3.min.js"></script><style>.div1{margin-top:28px;margin-left:12px;float:left;font-family:'黑体';font-size:20px;color:#CCC;}.div2{margin-top:28px;margin-right:12px;float:right;font-family:'黑体';font-size:20px;color:#CCC;}</style><script type="text/javascript">function logout(){$.post("<%=path%>/logout.do");alert("注销成功");//跳转到父窗口的login.jspwindow.parent.location.href="<%=path%>/login.jsp";}</script></head><bodystyle="background-color:#363636;"><div class="div1">员工管理系统</div><div class="div2">您好:${sessionScope.user.username}<a href="#" onclick="logout()">注销</a></div></body>
</html>

(4)left部分

left.jsp

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<% String path=request.getContextPath(); %>
<html><head><meta http-equive="content-type" content="text/html;charset=utf-8"/><script type="text/javascript" src="<%=path %>/js/jquery-1.8.3.min.js"></script><style type="text/css">body{background: #444;color:#CCC;margin-top:12px;}.big{height:45px;line-height:45px;padding-left:28px;font-size:14px;border:#999;color:#CCC;}.small{height:35px;line-height:35px;padding-left:48px;font-size:12px;background:#363636;}.box{/*开始时让二级菜单隐藏*/display:none;}</style></head><script>$(function(){//一级菜单点击后$(".big").click(function(){$(".box").hide(300);//二级标签全部隐藏$(this).next().show(300);//父标签下的子标签显示})})</script><body><!-- 从session中获取当前用户的权限,并遍历 --><c:forEach items="${pris }" var="pri" varStatus="s"><!-- 没有父id的,作为一级菜单 --><c:if test="${empty pri.pid }" var="r" scope="request"><div class="big">${pri.priname }</div><div class="box"><!-- 有父id的,作为二级菜单,并且跟在相应的一级菜单下 --><c:forEach items="${pris }" var="pri2"><c:if test="${!empty pri2.pid && pri2.pid==pri.priid}"><div class="small"><a href="${ pri2.priurl}" target="main">${pri2.priname }</a></div></c:if></c:forEach></div></c:if></c:forEach></body>
</html>

(5)异常/强制登录过滤器

异常过滤器的作用:如果在输入不合法信息后重定向,会出现http状态码报错,而真实的管理系统中应该让用户看到合理的异常信息操作,所以将异常全部捕捉后,人为书写出来。

ExceptionFilter.java

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<% String path=request.getContextPath(); %>
<html><head><meta http-equive="content-type" content="text/html;charset=utf-8"/><script type="text/javascript" src="<%=path %>/js/jquery-1.8.3.min.js"></script><style type="text/css">body{background: #444;color:#CCC;margin-top:12px;}.big{height:45px;line-height:45px;padding-left:28px;font-size:14px;border:#999;color:#CCC;}.small{height:35px;line-height:35px;padding-left:48px;font-size:12px;background:#363636;}.box{/*开始时让二级菜单隐藏*/display:none;}</style></head><script>$(function(){//一级菜单点击后$(".big").click(function(){$(".box").hide(300);//二级标签全部隐藏$(this).next().show(300);//父标签下的子标签显示})})</script><body><!-- 从session中获取当前用户的权限,并遍历 --><c:forEach items="${pris }" var="pri" varStatus="s"><!-- 没有父id的,作为一级菜单 --><c:if test="${empty pri.pid }" var="r" scope="request"><div class="big">${pri.priname }</div><div class="box"><!-- 有父id的,作为二级菜单,并且跟在相应的一级菜单下 --><c:forEach items="${pris }" var="pri2"><c:if test="${!empty pri2.pid && pri2.pid==pri.priid}"><div class="small"><a href="${ pri2.priurl}" target="main">${pri2.priname }</a></div></c:if></c:forEach></div></c:if></c:forEach></body>
</html>

强制登录过滤器的作用:实际的项目中写了很多个jsp页面,如果没有加入强制登录,所有的页面都可以通过浏览器访问到,这不符合封闭原则。为了使项目更加安全,所有操作均应在登录后依据权限展示。
LoginFilter.java

package web;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;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;/*** 类说明:*         强制登录过滤器* @author qianliangguo*/
public class LoginFilter implements Filter {public void destroy() {// TODO Auto-generated method stub}public void doFilter(ServletRequest request1, ServletResponse response1,FilterChain chain) throws IOException, ServletException {//判断当前请求是否登陆过,没有登陆过就重定向到login.jspHttpServletRequest request = (HttpServletRequest)request1;HttpServletResponse response =  (HttpServletResponse)response1;Object user = request.getSession().getAttribute("user");if(user==null){response.sendRedirect(request.getContextPath()+"/login.jsp");}else{chain.doFilter(request, response);}}public void init(FilterConfig arg0) throws ServletException {// TODO Auto-generated method stub}
}

六、给出项目完整文件

完整项目文件已上传至:csdn

员工信息管理系统(JavaWeb结课项目)相关推荐

  1. Javaweb企业员工信息管理系统

    大家好,这里是天行IT科技馆,我是你们的馆长! 本期项目是<Javaweb企业员工信息管理系统>,对应的视频教程,我已上传到B站.西瓜等视频平台,可复制文章标题关键词前往视频平台搜索观看. ...

  2. SSM整合项目—员工信息管理系统

    文章目录 项目源码资料获取: 项目基本信息 编写说明 一.问题描述及分析 二.功能模块 三.主要算法或流程描述 四.系统使用说明 五.问题及解决办法 六.项目总结 项目源码资料获取: SSM员工信息管 ...

  3. Java项目员工信息管理系统

    在Java SE中,对IO流与集合的操作在应用中比较重要.接下来,我以一个小型项目的形式,演示IO流.集合等知识点在实践中的运用. 该项目名称为"员工信息管理系统"(或" ...

  4. Javaweb实现员工信息管理系统

    员工信息管理系统 一.项目介绍 1.项目用到的技术栈 开发工具:idea 语言:java.js.html+ajax 数据库:MySQL 服务器:Tomcat 框架:mybatis.jQuery.lay ...

  5. JavaWeb EMS员工信息管理系统(servlet+jsp版本)

    EMS员工信息管理系统 MVC的设计模式 M层:Model模型层,负责业务,封装数据库的相关操作 Jdbc+javabean+方法-dao工厂 util DBUtil.java package uti ...

  6. qt项目:员工信息管理系统

    开发一个员工信息管理系统 一.项目具体要求: 1.用qt开发界面,数据库用QSqlite 数据库文件名:demostudent.db 2.通过界面能够查看到数据库中员工信息表中内容,包括员工姓名.年龄 ...

  7. 基于jsp、javaweb企业员工信息管理系统

    开发工具eclipse,jdk1.7,tomcat7 数据库mysql 技术servlet+jsp 企业员工信息管理系统主要用于实现公司的员工相关信息管理,基本功能包括:密码修改.员工管理.部门管理. ...

  8. 基于JavaWeb+MySQL的企业员工信息管理系统(考勤、工资、岗位、奖惩等)

    目录 绪论 1 1.1 设计背景 1 1.2 设计意义 1 1.3 设计思路 1 需求分析 2 2.1 需求描述 2 2.2 用例建模 2 2.3 用例描述 3 2.3.1 个人信息用例描述 3 2. ...

  9. Eclipse+Java+Swing+Mysql实现员工信息管理系统

    目录 一.系统介绍 1.开发环境 2.技术选型 3.系统功能 4.数据库 二.系统展示 1.登录系统 2.主页面 3.部门管理 4.职位管理 5.员工管理 三.部分代码 AdminDao.java D ...

最新文章

  1. 通过醉品商城改版反思网站改版的那些事
  2. Java学习_day007:数组与方法
  3. Shodan搜索引擎介绍
  4. 使用Picasso实现图片圆角和图片圆形
  5. 同步逻辑电路和异步逻辑电路
  6. Windows核心编程_调用控制台窗口
  7. JavaScript 小技巧之数组合并
  8. itunes store服务中断_从服务器开发底层聊一聊协程的实现原理
  9. chrome 插件开发指南
  10. 【Shashlik.EventBus】.NET 事件总线,分布式事务最终一致性简介
  11. Scala语言会取代Java的吗?
  12. iOS 实战开发课程笔记
  13. model 和WEB前台页面提交完美自动填充
  14. DeltaOne介绍
  15. ZORRO佐罗软件安装教程及一键新机使用方法详细简介
  16. 我在乐视9年,亲眼看贾跃亭一步步走向失控
  17. 学生网页作业 web网页设计实例作业 家乡旅游网站设计——家乡旅游-榆林子州(8页) 出游旅游主题度假酒店 计划出行网站设计
  18. #sora#笔记——工作流
  19. python读取手机文件_python 读取 网络 文件
  20. MATLAB 矩阵运算示例

热门文章

  1. 三星java3倍拍照手机_最强拍照手机 三星GALAXY K zoom评测
  2. 头条原创文章一键转换剪映生成视频
  3. MLX90640开发笔记(八)扩展知识-红外成像中的辐射率、灵敏度、精度、探测距离
  4. 云南昆明网站建设整体解决方案、怎么样做好一个有价值的网站
  5. [时区设定]功能漏洞或致 IPHONE 4S 电池续航减弱
  6. 华为NCE网管创建EVPL(共享VCTrunk) 路径法三步走
  7. vlink的其他应用场景
  8. 调查:区块链游戏玩家将玩NFT游戏视为一份潜在的全职工作
  9. android glide设置缓存大小,Glide4-入门教程-5-缓存机制(内存缓存和磁盘缓存)
  10. ozip 改成 zip 文件