MVC设计模式实现权限管理登录,超详细
功能实现:在页面输入给定的用户名之一,可以显示当前用户的权限,也可以在页面更改该用户的权限,更新之后保存。像下面这样。

填写用户名提交:

显示用户AAA的权限:

修改权限(增加article3):

点击Update之后,权限更新,下次访问,输入用户名AAA提交后显示:

提交用户名,显示用户权限和修改用户权限页面:authority-manager.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>"> <title>My JSP 'authority-manager.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>
<center>
<br><br>
<form action="AuthorityServlet?method=getAuthorities" method="post">
name:<input type="text" name="username"/>
<input type="submit" value="Submit"/>
</form> <c:if test="${requestScope.user!=null }">
<br><br>
${requestScope.user.username}的权限是:
<br><br> <form action="AuthorityServlet?method=updateAuthorities" method="post">
<input type="hidden" name="username" value="${requestScope.user.username}"/>
<br><br>
<!-- 两个循环:外层循环先将权限都列出来,内层循环用于将对应用户的对应权限 -->
<c:forEach items="${authorities}" var="auth">
<c:set var="flag" value="false"></c:set> <c:forEach items="${user.authorities}" var="ua">
<c:if test="${ua.url==auth.url }">
<c:set var="flag" value="true"></c:set>
</c:if>
</c:forEach> <c:if test="${flag==true}">
<input type="checkbox" name="authority" value="${auth.url}" checked="checked"/>${auth.displayname}
</c:if>
<c:if test="${flag==false}">
<input type="checkbox" name="authority" value="${auth.url}" />${auth.displayname}
</c:if> <br><br>
</c:forEach>
<input type="submit" value="Update">
</form>
</c:if> </center>
</body>
</html>
Servlet实现类,AuthorityServlet.java
package javaweb.com.anthorityManage; import java.io.IOException;
import java.io.PrintWriter;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.List; import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; public class AuthorityServlet extends HttpServlet { public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//authority-manager.jsp中的method参数-->getAuthorities
String methodName=request.getParameter("method");
try {
//getClass-->Class型对象,获得权限为public的内部类(即为public class AuthorityServlet)
//getMethod返回Method类型的对象,每个Method类型的对象代表一个方法
//getMethod(String方法名称,入口参数类型1.class,入口参数类型2.class)-->访问指定名称和参数类型的方法
Method method=getClass().getMethod(methodName, HttpServletRequest.class,HttpServletResponse.class);
//invoke(Object obj,Object...args)-->利用指定参数args执行指定对象obj中的该方法,返回值为Object型
//利用指定参数request,response执行method方法
method.invoke(this, request,response);
} catch (NoSuchMethodException | SecurityException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
}
private UserDao userDao=new UserDao();
public void getAuthorities(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException{
//从请求参数中获取用户名
String username=request.getParameter("username");
//从userDao中获取用户名(带有用户的权限信息)
User user=userDao.get(username);
//将userDao中获得的用户名传递给request请求
request.setAttribute("user",user);
//userDao中获取的权限信息添加到request中
request.setAttribute("authorities", userDao.getAuthorities());
//按照用户名转发到相应的权限管理页面
request.getRequestDispatcher("/jspTest/authority-manager.jsp").forward(request, response); }
public void updateAuthorities(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException{
//从请求域获得用户名和相应的多个权限
String username=request.getParameter("username");
//从客户端request域获得的权限
String[] authorities=request.getParameterValues("authority");
List<Authority> authorityList=userDao.getAuthorities(authorities);
userDao.update(username, authorityList);
//request.getContextPath()-->返回站点的根路径
response.sendRedirect(request.getContextPath()+"/jspTest/authority-manager.jsp"); }
}
UserDao类执行具体的事务操作,UserDao.java
package javaweb.com.anthorityManage; import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
//UserDao类执行具体的事务操作
public class UserDao { private static Map<String,User> users;
private static List<Authority> authorities; static{
authorities=new ArrayList<>();
authorities.add(new Authority("article-1","/jspTest/1.jsp"));
authorities.add(new Authority("article-2","/jspTest/2.jsp"));
authorities.add(new Authority("article-3","/jspTest/3.jsp"));
authorities.add(new Authority("article-4","/jspTest/4.jsp")); users=new HashMap<String,User>();
User user1=new User("AAA",authorities.subList(0,2));
users.put("AAA",user1);
User user2=new User("BBB",authorities.subList(2,4));
users.put("BBB",user2);
}
//相当于String m1(){} 获得users中的用户姓名
User get(String username){
return users.get(username);
}
//更新用户的权限
void update(String username,List<Authority> authorities){
users.get(username).setAuthorities(authorities);
}
public List<Authority> getAuthorities(){
return authorities;
}
public List<Authority> getAuthorities(String[] urls){
List<Authority> authorities2=new ArrayList<>();
for(Authority authority:authorities){
if(urls!=null){
for(String url:urls){
//遍历比较,如果url(请求域的)==权限中存储的url,则将请求域的权限添加到authorities2中成为某个用户名的权限
if(url.equals(authority.getUrl())){
authorities2.add(authority);
}
}
}
}
return authorities2;
}
}
在web.xml中进行配置:
<servlet>
<servlet-name>AuthorityServlet</servlet-name>
<servlet-class>javaweb.com.anthorityManage.AuthorityServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>AuthorityServlet</servlet-name>
<url-pattern>/AuthorityServlet</url-pattern>
</servlet-mapping>
Authority.java
package javaweb.com.anthorityManage;
public class Authority {
private String displayname;
private String url;
public String getDisplayname() {
return displayname;
}
public void setDisplayname(String displayname) {
this.displayname = displayname;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public Authority(String displayname, String url) {
super();
this.displayname = displayname;
this.url = url;
}
public Authority(){}
}
User.java
package javaweb.com.anthorityManage;
import java.util.List;
public class User {
private String username;
private List<Authority> authorities;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public List<Authority> getAuthorities() {
return authorities;
}
public void setAuthorities(List<Authority> authorities) {
this.authorities = authorities;
}
public User(String username, List<Authority> authorities) {
super();
this.username = username;
this.authorities = authorities;
}
public User(){}
}
AuthorityServlet.jsp中的form表单:
<form action="AuthorityServlet?method=getAuthorities" method="post">
name:<input type="text" name="username"/>
<input type="submit" value="Submit"/>
</form>
1.form表单提交到Servlet的映射地址AuthorityServlet中,在web.xml中可以读取到相应的Servlet为javaweb.com.anthorityManage.AuthorityServlet;
2.AuthorityServlet.java调用doPost()方法处理请求,String methodName=request.getParameter("method");从请求域request中读取到method的参数为getAuthorities,Method method=getClass().getMethod(methodName, HttpServletRequest.class,HttpServletResponse.class);访问指定名称和参数类型的方法,即开始执行AuthorityServlet类中的getAuthorities(HttpServletRequest request, HttpServletResponse response)方法;
3.AuthorityServlet类中的getAuthorities(HttpServletRequest request, HttpServletResponse response)方法实现的功能是:
String username=request.getParameter("username");从请求域中获取参数,得到请求域中用户提交的用户名。User user=userDao.get(username);根据得到的用户名username在userDao中获取数据库中存取的用户名。之后将userDao中获取的用户名及对应的权限信息提交给request,并且转发到相应的权限管理界面authority-manager.jsp。
4.在权限管理界面authority-manager.jsp,重复执行1,2步,在第2步中访问到的方法为AuthorityServlet类中的updateAuthorities(HttpServletRequest request, HttpServletResponse response)。
5.在updateAuthorities(HttpServletRequest request, HttpServletResponse response)方法中先从请求域中获得用户名及相应的权限信息,List<Authority> authorityList=userDao.getAuthorities(authorities);调用userDao中的getAuthorities(authorities)方法,即如下代码:
public List<Authority> getAuthorities(String[] urls){
List<Authority> authorities2=new ArrayList<>();
for(Authority authority:authorities){
if(urls!=null){
for(String url:urls){
//遍历比较,如果url(请求域的)==权限中存储的url,则将请求域的权限添加到authorities2中成为某个用户名的权限
//由URL识别代表权限
if(url.equals(authority.getUrl())){
authorities2.add(authority);
}
}
}
}
return authorities2;
}
上述代码实现的功能是根据Url识别权限,如果url(请求域的)==权限中存储的url,则将请求域的权限添加到authorities2中成为某个用户名的权限。
6.userDao.update(username, authorityList);更新用户的权限信息。
MVC设计模式实现权限管理登录,超详细的更多相关文章
- [.Net MVC] 用户角色权限管理_使用CLK.AspNet.Identity
项目:后台管理平台 意义:一个完整的管理平台需要提供用户注册.登录等功能,以及认证和授权功能. 一.为何使用CLK.AspNet.Identity 首先简要说明所采取的权限控制方式.这里采用了基于角色 ...
- asp.net mvc +easyui 实现权限管理(二)
一写完后,好久没有继续写了.最近公司又在重新开发权限系统了,但是由于我人微言轻,无法阻止他们设计一个太监版的权限系统.想想确实是官大一级压死人啊, 没办法我只好不参与了 让他们去折腾. 我就大概说一下 ...
- 一步一步Asp.Net MVC系列_权限管理总结(附MVC权限管理系统源码)
在上一节中我们总结了关于权限控制的方式,我们这一节讲解关于权限控制中角色权限的授予处理等等并做本系列的总结. 首先,我们来谈谈权限控制中角色权限的控制,上一节只是针对权限拦截中比较粗的控制,如果我们需 ...
- vue vuex vue-rouert后台项目——权限路由(超详细简单版)
项目地址:vue-simple-template共三个角色:adan barbara carrie 密码全是:123456 adan 拥有 最高权限A 他可以看到 red , yellow 和 blu ...
- Swarm容器集群管理(超详细)
一.Swarm介绍 Swarm是Docker公司自研发的容器集群管理系统, Swarm在早期是作为一个独立服务存在, 在Docker Engine v1.12中集成了Swarm的集群管理和编排功能.可 ...
- asp.net mvc +easyui 实现权限管理(一)
权限是每个企业应用必须的模块,可以简单,也能比较复杂.目前我们公司的权限要求是 能管控页面.字段.按钮.以及数据权限. 正好公司的进销存系统权限模块由我负责.做完后做下记录是个不错的习惯,知识是慢慢积 ...
- 一步一步Asp.Net MVC系列_权限管理设计
http://www.cnblogs.com/mysweet/archive/2012/07/26/2610793.html
- Linux系统中(CentOS 7)的用户和权限管理
目录 用户和组 用户信息文件 用户密码信息 相关命令 用户管理 组管理 密码管理 权限管理 文件的详细信息 文件权限 相关命令 用户和组 用户信息文件 /etc/passwd (1 2 3 4 5 6 ...
- ASP.NET MVC+EF框架+EasyUI实现权限管理系列(15)-用户登录详细错误和权限数据库模型设计
原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(15)-用户登录详细错误和权限数据库模型设计 ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇) ...
随机推荐
- 在Java中如何优雅地判空
判空灾难 作为搬砖党的一族们,我们对判空一定再熟悉不过了,不要跟我说你很少进行判空,除非你喜欢NullPointerException. 不过NullPointerException对于很多猿们来 ...
- 初探 模拟退火算法 POJ2420 HDU1109
模拟退火算法来源于固体退火原理,更多的化学物理公式等等这里不再废话,我们直接这么来看 模拟退火算法简而言之就是一种暴力搜索算法,用来在一定概率下查找全局最优解 找的过程和固体退火原理有所联系,一般来讲 ...
- css ie浏览器兼容问题
第一,IE6,不支持小于12px的盒子,任何小于12px的盒子,在IE6中看都大 解决办法很简单,就是将盒子的字号,设置小(小于盒子的高),比如0px. 1 height: 4px; 2 _font- ...
- nginx克隆之后问题
[alert] kill(2942, 1) failed (No such process) 背景:虚拟机克隆之后启动service nginx reload报这个错,而且没有日志 根据这个博文htt ...
- 关于window.open在不同浏览器的不同点
菜鸟教程: http://www.runoob.com/jsref/met-win-open.html 一.基本语法:window.open(URL,name,specs,replace)其中:URL ...
- 基础篇:1)时代的发展与结构设计--3d与2d设计的变迁
本章目的:机械设计需要追寻时代的脚步. 1.机械作图时代的划分 这张图是作者个人对机械作图发展的简单划分,并非哪个网站的数据.所以粗糙或错误请海涵. 2.2d作图时代 纯2d时代中,工程师开只绘制二维 ...
- Vivado 的IP:Global 和 Out-Of-Context选项问题
在Vivado定制IP的时候,或者在IP Catalog中双击一个IP,不论该IP是我们自己添加到工程的自定义IP,还是Vivado自己带的IP,选择"Customize IP"后 ...
- mysql编码不统一形成的错误
错误提示:[Err]1267 - Illegal mix of collations(utf8_general_ci,IMPLICIT) and (utf8_unicode_ci,IMPLICIT) ...
- (转)expect命令脚本语言介绍及生产实践
原文:http://www.fblinux.com/?p=526 Expect介绍 expect是一个用来实现自动交互功能的软件套件,是用来实现自动和交互式任务程序进行通信,无需人的手工干预.比如SS ...
- Delphi导出word
//导出Wordprocedure TFrm_Computing.ExportWord;varwordApp, WordDoc, WrdSelection, wrdtable, wrdtable1, ...