基于SSM框架权限系统的开发
2018-01-12 18:55
633 查看
有bug请在评论区留言
这是个十分简单的权限实现,后端采用SSM框架,前段展示层使用ztree(ztree官网),实现控制则使用jsp自定义的判断标签;
第一步:新建power数据库。
用户表user,权利表power,用户-权利关系表userPower,
数据库完成,开始web部分
第二步:新建maven项目
添加项目相关jar包,这是项目的架构,biaoqian包是存放jsp自定义标签的处理类
代码贴出关键部分
controller层代码:
两个service的方法:
jsp页面有3个,login.jsp welcome.jsp admin.jsp,这里的login.jsp就不用说了吧,一个输入框输入姓名后,去数据库查是否存在这个人,很简单;
welcome.jsp
admin.jsp
请注意welcome.jsp中 <%@ taglib uri="/WEB-INF/powertag.tld" prefix="yu" %> 这段代码,这是自定义标签的引用。
下面开始自定义一个jsp判断标签,简单的哦
jsp标签创建分3步,先创建处理类,在编写tid文件,最后引用。
处理类:
powertag.tid文件,注意这个文件位置在WEB-INF目录下,与web.xml同级别:
最后在需要引用的界面引用
普通成员效果图:
admin效果图:
代码完成!
结束语:给与没有权限设计思路小伙伴的一个方法,仅作为案例(样式什么的随便啦)。
转载请注明出处!
这是个十分简单的权限实现,后端采用SSM框架,前段展示层使用ztree(ztree官网),实现控制则使用jsp自定义的判断标签;
第一步:新建power数据库。
用户表user,权利表power,用户-权利关系表userPower,
/* Navicat MySQL Data Transfer Source Server : 123 Source Server Version : 50610 Source Host : 127.0.0.1:3306 Source Database : power Target Server Type : MYSQL Target Server Version : 50610 File Encoding : 65001 Date: 2018-01-15 21:07:24 */ SET FOREIGN_KEY_CHECKS=0; -- ---------------------------- -- Table structure for power -- ---------------------------- DROP TABLE IF EXISTS `power`; CREATE TABLE `power` ( `pId` int(4) NOT NULL AUTO_INCREMENT, `pName` varchar(25) DEFAULT NULL, PRIMARY KEY (`pId`) ) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8; -- ---------------------------- -- Records of power -- ---------------------------- INSERT INTO `power` VALUES ('1', '吃'); INSERT INTO `power` VALUES ('2', '吃饭'); INSERT INTO `power` VALUES ('3', '吃面条'); INSERT INTO `power` VALUES ('4', '吃零食'); INSERT INTO `power` VALUES ('5', '喝'); INSERT INTO `power` VALUES ('6', '喝芬达'); INSERT INTO `power` VALUES ('7', '喝可乐'); INSERT INTO `power` VALUES ('8', '嘴'); INSERT INTO `power` VALUES ('9', '说话'); INSERT INTO `power` VALUES ('10', '喷人'); -- ---------------------------- -- Table structure for user -- ---------------------------- DROP TABLE IF EXISTS `user`; CREATE TABLE `user` ( `uId` int(4) NOT NULL AUTO_INCREMENT, `uName` varchar(10) DEFAULT NULL, PRIMARY KEY (`uId`) ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8; -- ---------------------------- -- Records of user -- ---------------------------- INSERT INTO `user` VALUES ('1', 'admin'); INSERT INTO `user` VALUES ('2', 'tom'); INSERT INTO `user` VALUES ('3', 'jack'); -- ---------------------------- -- Table structure for userpower -- ---------------------------- DROP TABLE IF EXISTS `userpower`; CREATE TABLE `userpower` ( `uPId` int(4) NOT NULL AUTO_INCREMENT, `uPUId` int(11) DEFAULT NULL, `uPPId` int(11) DEFAULT NULL, PRIMARY KEY (`uPId`) ) ENGINE=InnoDB AUTO_INCREMENT=17 DEFAULT CHARSET=utf8; -- ---------------------------- -- Records of userpower -- ---------------------------- INSERT INTO `userpower` VALUES ('1', '1', '1'); INSERT INTO `userpower` VALUES ('12', '2', '1'); INSERT INTO `userpower` VALUES ('13', '2', '2'); INSERT INTO `userpower` VALUES ('14', '2', '3'); INSERT INTO `userpower` VALUES ('15', '2', '4'); INSERT INTO `userpower` VALUES ('16', '2', '5');
数据库完成,开始web部分
第二步:新建maven项目
添加项目相关jar包,这是项目的架构,biaoqian包是存放jsp自定义标签的处理类
代码贴出关键部分
controller层代码:
package cn.controller; import java.util.List; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; import org.springframework.stereotype.Controller; import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseBody; import com.alibaba.fastjson.JSONArray; import cn.pojo.Power; import cn.pojo.User; import cn.pojo.UserPower; import cn.service.UserPowerService; import cn.service.UserService; @Controller @RequestMapping("power") public class PowerController { @Resource private UserService userService; @Resource private UserPowerService userPowerService; /** * 登录 * * @param request * @param u * @param model * @return */ @RequestMapping("login") public String login(HttpServletRequest request, User u, Model model) { User user = userService.login(u); if (user == null) { return "redirect:/login.jsp"; } HttpSession session = request.getSession(); session.setAttribute("USER_LOGIN", user); if (user.getuName().equals("admin")) { List<User> list_user = userService.getAllUser(); session.setAttribute("list_user", list_user); return "admin"; } return "welcome"; } /** * 异步方法,根据uid获取相应权限list * * @param uId * @return */ @RequestMapping("getPowerByUId") @ResponseBody public String getPowerByUId(@RequestParam("uId") String uId) { List<UserPower> i = userPowerService.getPowerByUId(Integer.parseInt(uId)); return JSONArray.toJSONString(i); } @RequestMapping("updatePower") public String updatePower(@RequestParam("uId") String uId, @RequestParam("pow") String pow) { userPowerService.deletePower(Integer.parseInt(uId));// 增加前先删除具有的权限 String[] p = pow.split(","); UserPower up = new UserPower(); for (String power : p) { if (power.length() > 0) { up.setuPUId(Integer.parseInt(uId)); up.setuPPId(Integer.parseInt(power)); userPowerService.addPower(up);// 增加权限 } } return "admin"; } }
两个service的方法:
package cn.service; import java.util.List; import org.apache.ibatis.annotations.Param; import cn.pojo.UserPower; public interface UserPowerService { // 根据uid查出具有的权限 List<UserPower> getPowerByUId(Integer uId); // 增加权限 int addPower(UserPower userPower); // 删除权限 int deletePower(Integer uId); } package cn.service; import java.util.List; import cn.pojo.User; public interface UserService { // 登录 User login(User u); // 获得所有用户 List<User> getAllUser(); }
jsp页面有3个,login.jsp welcome.jsp admin.jsp,这里的login.jsp就不用说了吧,一个输入框输入姓名后,去数据库查是否存在这个人,很简单;
welcome.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <%@ taglib uri="/WEB-INF/powertag.tld" prefix="yu" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>My JSP 'welcome.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <!-- <link rel="stylesheet" type="text/css" href="styles.css"> --> </head> <body> 我是${USER_LOGIN.uName },<br/> 我具有:<hr/> <p style="color:red;"> <yu:power power="吃">吃,<br/></yu:power> <yu:power power="吃饭">吃饭,<br/></yu:power> <yu:power power="吃面条">吃面条,<br/></yu:power> <yu:power power="吃零食">吃零食,<br/></yu:power> <yu:power power="喝">喝,<br/></yu:power> <yu:power power="喝芬达">喝芬达,<br/></yu:power> <yu:power power="喝可乐">喝可乐,<br/></yu:power> <yu:power power="嘴">嘴,<br/></yu:power> <yu:power power="说话">说话,<br/></yu:power> <yu:power power="喷人">喷人,<br/></yu:power> </p> <hr/> 功能的 </body> </html>
admin.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path + "/"; %> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>My JSP 'admin.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <!-- <link rel="stylesheet" type="text/css" href="styles.css"> --> </head> <body> <p>你想修改谁的权限:</p> <c:forEach var="list_user" items="${list_user }"> <c:if test="${list_user.uName!='admin' }"> <input type="radio" name="uName" value="${list_user.uId }" />${list_user.uName } </c:if> </c:forEach> <div id="ztree" style="display:none;"> <ul id="baseTree" class="ztree" style="width:260px; overflow:auto;"></ul> <button id="btn">提交</button> </div> </body> </html> <link rel="stylesheet" type="text/css" href="ztree/css/zTreeStyle/zTreeStyle.css"> <script type="text/javascript" src="js/jquery-1.8.0.js"></script> <script type="text/javascript" src="ztree/jquery.ztree.all-3.5.js"></script> <script> //$("input[name=uName]:checked") //显示已有权限 $("input[name=uName]").click(function() { var uId = $("input[name=uName]:checked").val(); $("#ztree").css("display", "block") var treeObj = $.fn.zTree.getZTreeObj("baseTree"); treeObj.checkAllNodes(false); //所有节点取消选中 treeObj.expandAll(false); //所有节点关闭 $.post("power/getPowerByUId?uId=" + uId, function(data) { var v = JSON.parse(data); for (var i = 0; i < v.length; i++) { var node = treeObj.getNodeByParam("value", v[i].uPPId, null); treeObj.expandNode(node, true, false); //指定选中ID节点展开 treeObj.checkNode(node); //指定节点选中 } }, "text") }) //修改权限 $("#btn").click(function() { var pow = ""; var uId = $("input[name=uName]:checked").val() var treeObj = $.fn.zTree.getZTreeObj("baseTree"); var nodes = treeObj.getCheckedNodes(true); for (var i = 0; i < nodes.length; i++) { pow = pow + "," + nodes[i].value; } location.href = "power/updatePower?uId="+uId+"&pow="+pow; }) //设置ztree var setting = { check : { chkboxType : { "Y" : "ps", "N" : "s" }, //勾选checkbox对于父子节点的关联关系,取消勾选时不关联父 chkStyle : "checkbox", enable : true //是否复选框 }, data : { simpleData : { enable : true } } }; var zNodes = [ { id : 1, name : "吃", value : "1" }, { id : 11, pId : 1, name : "吃饭", value : "2" }, { id : 12, pId : 1, name : "吃面条", value : "3" }, { id : 13, pId : 1, name : "吃零食", value : "4" }, { id : 2, name : "喝", value : "5" }, { id : 21, pId : 2, name : "喝芬达", value : "6" }, { id : 21, pId : 2, name : "喝可乐", value : "7" }, { id : 3, name : "嘴", value : "8" }, { id : 31, pId : 3, name : "说话", value : "9" }, { id : 32, pId : 3, name : "喷人", value : "10" } ] $.fn.zTree.init($("#baseTree"), setting, zNodes); </script>
请注意welcome.jsp中 <%@ taglib uri="/WEB-INF/powertag.tld" prefix="yu" %> 这段代码,这是自定义标签的引用。
下面开始自定义一个jsp判断标签,简单的哦
jsp标签创建分3步,先创建处理类,在编写tid文件,最后引用。
处理类:
package cn.biaoqian; import java.util.List; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; import javax.servlet.jsp.JspException; import javax.servlet.jsp.PageContext; import javax.servlet.jsp.tagext.BodyTagSupport; import javax.servlet.jsp.tagext.TagSupport; import cn.pojo.Power; import cn.pojo.User; /** * @author Yu * */ public class Yu extends TagSupport { private PageContext pageContext; private String power; // 设置PageContext对象 public void setPageContext(PageContext pageContext) { this.pageContext = pageContext; } public void setPower(String power) { this.power = power; } /** * 标签开始处理..调用的方法 * */ @Override public int doStartTag() throws JspException { try { HttpServletRequest request = (HttpServletRequest) pageContext.getRequest(); HttpSession session = request.getSession(); User u = (User) session.getAttribute("USER_LOGIN"); System.out.println(u); List<Power> power = u.getPower(); for (int i = 0; i < power.size(); i++) { if (power.get(i).getpName().equals(this.power)) { // 允许访问标签body return BodyTagSupport.EVAL_BODY_INCLUDE;// 返回此则执行标签body中内容,SKIP_BODY则不执行 } } return BodyTagSupport.SKIP_BODY; } catch (Exception e) { return BodyTagSupport.SKIP_BODY; } } /** * * 标签处理结束的调用的方法 */ @Override public int doEndTag() throws JspException { return super.doEndTag(); } /** * * 释放资源 */ @Override public void release() { super.release(); } }
powertag.tid文件,注意这个文件位置在WEB-INF目录下,与web.xml同级别:
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN" "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd"> <!-- 标签描述TLD文件 --> <taglib> <tlib-version>1.1</tlib-version> <jsp-version>1.2</jsp-version> <!-- 默认前缀名 --> <short-name>yu</short-name> <uri>http://www.mytaglib.com/taglib</uri> <display-name>MyDateTaglib</display-name> <description>My date taglib!</description> <tag> <name>power</name> <tag-class>cn.biaoqian.Yu</tag-class> <attribute> <name>power</name> <!-- 属性是否必须 --> <required>true</required> <!-- 属性是否支持小脚本 EL表达式 --> <rtexprvalue>true</rtexprvalue> </attribute> </tag> </taglib>
最后在需要引用的界面引用
<%@ taglib uri="/WEB-INF/powertag.tld" prefix="yu" %>
普通成员效果图:
admin效果图:
代码完成!
结束语:给与没有权限设计思路小伙伴的一个方法,仅作为案例(样式什么的随便啦)。
转载请注明出处!
相关文章推荐
- 基于springboot+redis+bootstrap+mysql开发一套属于自己的分布式springcloud云权限架构(十七)【权限架构系统(基础框架搭建)】
- 基于ssm框架的个人博客系统(11)--后台开发及前后端数据交互
- 基于ssm框架的个人博客系统(10)--编写博客页面开发
- RDIFramework.NET ━ .NET快速信息化系统开发框架 V3.2->WinForm版本新增新的用户权限设置界面效率更高、更规范
- 【转载】Winform开发框架之权限管理系统
- 权限管理和信息化系统快速开发框架源码学学习总结
- 基于SSM的RBAC权限系统(2)-Shiro使用注解下AJAX交互临时解决方案
- 基于SSM的RBAC权限系统(3)-Shiro基于非注解的基础使用
- .NET通用权限系统快速开发框架
- 基于框架的应用系统开发的质量属性
- 通用权限系统快速开发框架
- Tangram:一个基于MFC框架的柔性软件开发系统
- RDIFramework.NET ━ .NET快速信息化系统开发框架 - 4.9 操作(功能)权限管理模块
- 基于SpringBoot框架的权限管理系统--sbed
- 基于MVC4+EasyUI的Web开发框架形成之旅--权限控制
- Tangram:一个基于MFC框架的柔性软件开发系统
- 基于java极速WEB+ORM 框架:jfinal2.0开发的通用后台管理系统及源码
- 基于spring+struts2+ibatis+OperaMasks实现的小系统(实现权限管理和动态开发)
- Winform开发框架之权限管理系统
- .NET快速信息化系统开发框架 V3.2 -> WinForm“组织机构管理”界面组织机构权限管理采用新的界面,操作权限按模块进行展示