粗粒度权限控制(拦截是否登录、拦截用户名admin权限)

2024-06-20 01:18

本文主要是介绍粗粒度权限控制(拦截是否登录、拦截用户名admin权限),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

RBAC --> 基于角色的权限控制
  • tb_user
  • tb_role
  • tb_userrole
  • tb_menu(增、删、改、查)
  • tb_rolemenu
1 说明
给出三个页面:index.jsp、user.jsp、admin.jsp。
  • index.jsp:谁都可以访问,没有限制;
  • user.jsp:只有登录用户才能访问;
  • admin.jsp:只有管理员才能访问。
2 分析
设计User类:username、password、grade,其中grade表示用户等级,1表示普通用户,2表示管理员用户。
当用户登录成功后,把user保存到session中。
创建LoginFilter,它有两种过滤方式:
  • 如果访问的是user.jsp,查看session中是否存在user;
  • 如果访问的是admin.jsp,查看session中是否存在user,并且user的grade等于2。

3 代码

index.jsp  

 1 <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>2 <%@ page contentType="text/html;charset=UTF-8" language="java" %>3 <html>4   <head>5     <title>$Title$</title>6   </head>7   <body>8   <h1>主页</h1>9   <h3>${user.username }</h3>
10   <hr/>
11   <a href="<c:url value='/login.jsp'/>">登录</a><br/>
12   <a href="<c:url value='/users/users.jsp'/>">用户页面</a><br/>
13   <a href="<c:url value='/admin/admin.jsp'/>">管理员页面</a>
14   </body>
15 </html>

login.jsp

 1 <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>2 <%@ page contentType="text/html;charset=UTF-8" language="java" %>3 <html>4 <head>5     <title>Title</title>6 </head>7 <body>8 <h1>登录</h1>9 <p style="font-weight: 900; color: red">${msg }</p>
10 <form action="<c:url value='/LoginServlet'/>" method="post">
11     用户名:<input type="text" name="username"/><br/>
12     密 码:<input type="password" name="password"/><br/>
13     <input type="submit" value="登录"/>
14 </form>
15 </form>
16 </body>
17 </html>

users.jsp

 1 <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>2 <%--3   Created by IntelliJ IDEA.4   web.user.User: Mac5   Date: 13/09/20176   Time: 1:22 PM7   To change this template use File | Settings | File Templates.8 --%>9 <%@ page contentType="text/html;charset=UTF-8" language="java" %>
10 <html>
11 <head>
12     <title>Title</title>
13 </head>
14 <body>
15 <h1>用户页面</h1>
16 <h3>${user.username }</h3>
17 <hr/>
18 </body>
19 </html>

admin.jsp

 1 <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>2 <%@ page contentType="text/html;charset=UTF-8" language="java" %>3 <html>4 <head>5     <title>Title</title>6 </head>7 <body>8 <h1>管理员页面</h1>9 <h3>${user.username }</h3>
10 <hr/>
11 </body>
12 </html>

User.java

 1 public class User {2     private String username;3     private String password;4     private int grade;5 6     public User(String username, String password, int grade) { 7 this.username = username; 8 this.password = password; 9 this.grade = grade; 10  } 11 12 public int getGrade() { 13 return grade; 14  } 15 16 public void setGrade(int grade) { 17 this.grade = grade; 18  } 19 20 public String getUsername() { 21 return username; 22  } 23 24 public void setUsername(String username) { 25 this.username = username; 26  } 27 28 public String getPassword() { 29 return password; 30  } 31 32 public void setPassword(String password) { 33 this.password = password; 34  } 35 36  @Override 37 public String toString() { 38 return "web.user.User{" 39 "username='" username '\'' 40 ", password='" password '\'' 41 '}'; 42  } 43 }

LoginServlet.java

 1 package web.servlet;2 3 import web.service.UserService;4 import web.user.User;5 import javax.servlet.ServletException;6 import javax.servlet.annotation.WebServlet; 7 import javax.servlet.http.HttpServlet; 8 import javax.servlet.http.HttpServletRequest; 9 import javax.servlet.http.HttpServletResponse; 10 import java.io.IOException; 11 12 @WebServlet(name = "LoginServlet",urlPatterns = "/LoginServlet") 13 public class LoginServlet extends HttpServlet { 14 15 public void doPost(HttpServletRequest request, HttpServletResponse response) 16 throws ServletException, IOException { 17 request.setCharacterEncoding("utf-8"); 18 response.setContentType("text/html;charset=utf-8"); 19 20 String username = request.getParameter("username"); 21 String password = request.getParameter("password"); 22 UserService userService = new UserService(); 23 User user = userService.login(username, password); 24 if(user == null ) { 25 request.setAttribute("msg", "用户名或密码错误"); 26 request.getRequestDispatcher("/login.jsp").forward(request, response); 27 } else { 28 request.getSession().setAttribute("user", user); 29 request.getRequestDispatcher("/index.jsp").forward(request, response); 30  } 31  } 32 }

UserServlet.java

 1 package web.servlet;2 3 import web.user.User;4 5 import javax.servlet.ServletException;6 import javax.servlet.annotation.WebServlet;7 import javax.servlet.http.HttpServlet; 8 import javax.servlet.http.HttpServletRequest; 9 import javax.servlet.http.HttpServletResponse; 10 import java.io.IOException; 11 import java.util.HashMap; 12 import java.util.Map; 13 14 @WebServlet(name = "UserServlet",urlPatterns = "/UserServlet") 15 public class UserServlet extends HttpServlet { 16 private static Map<String,User> users = new HashMap<String, User>(); 17 static { 18 users.put("zhangSan", new User("zhangSan", "123", 1)); 19 users.put("liSi", new User("liSi", "123", 2)); 20  } 21 22 public User login (String username, String password) { 23 User user = users.get(username); 24 if(user == null) return null; 25 return user.getPassword().equals(password) ? user : null; 26  } 27 }

UserService.java

 1 package web.service;2 3 import web.user.User;4 import java.util.HashMap;5 import java.util.Map;6 7 public class UserService { 8 private static Map<String,User> users = new HashMap<String, User>(); 9 static { 10 users.put("zhangSan", new User("zhangSan", "123", 1)); 11 users.put("liSi", new User("liSi", "123", 2)); 12  } 13 14 public User login (String username, String password) { 15 User user = users.get(username); 16 if(user == null) return null; 17 return user.getPassword().equals(password) ? user : null; 18  } 19 }

AdminFilter.java

 1 package web.filter;2 3 import web.user.User;4 5 import javax.servlet.*;6 import javax.servlet.annotation.WebFilter;7 import javax.servlet.http.HttpServletRequest; 8 import java.io.IOException; 9 10 @WebFilter(filterName = "AdminFilter",urlPatterns = "/admin/*") 11 public class AdminFilter implements Filter { 12 public void destroy() {} 13 public void init(FilterConfig fConfig) throws ServletException {} 14 15 public void doFilter(ServletRequest request, ServletResponse response, 16 FilterChain chain) throws IOException, ServletException { 17 response.setContentType("text/html;charset=utf-8"); 18 HttpServletRequest req = (HttpServletRequest) request; 19 User user = (User) req.getSession().getAttribute("user"); 20 if(user == null) { 21 response.getWriter().print("您还没有登录!"); 22 return; 23  } 24 if(user.getGrade() < 2) { 25 response.getWriter().print("您的等级不够!"); 26 return; 27  } 28  chain.doFilter(request, response); 29  } 30 31 }

UserFilter.java

 1 package web.filter;2 3 import web.user.User;4 5 import javax.servlet.*;6 import javax.servlet.annotation.WebFilter;7 import javax.servlet.http.HttpServletRequest; 8 import java.io.IOException; 9 10 @WebFilter(filterName = "UseFilter",urlPatterns = "/users/*") 11 public class UseFilter implements Filter { 12 public void destroy() { 13  } 14 public void doFilter(ServletRequest request, ServletResponse response, 15 FilterChain chain) throws IOException, ServletException { 16 response.setContentType("text/html;charset=utf-8"); 17 HttpServletRequest req = (HttpServletRequest) request; 18 User user = (User) req.getSession().getAttribute("user"); 19 if(user == null) { 20 response.getWriter().print("您还没有登录"); 21 return; 22  } 23  chain.doFilter(request, response); 24  } 25 26 public void init(FilterConfig config) throws ServletException { 27 28  } 29 }

 

这篇关于粗粒度权限控制(拦截是否登录、拦截用户名admin权限)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1076688

相关文章

python判断文件是否存在常用的几种方式

《python判断文件是否存在常用的几种方式》在Python中我们在读写文件之前,首先要做的事情就是判断文件是否存在,否则很容易发生错误的情况,:本文主要介绍python判断文件是否存在常用的几种... 目录1. 使用 os.path.exists()2. 使用 os.path.isfile()3. 使用

Python远程控制MySQL的完整指南

《Python远程控制MySQL的完整指南》MySQL是最流行的关系型数据库之一,Python通过多种方式可以与MySQL进行交互,下面小编就为大家详细介绍一下Python操作MySQL的常用方法和最... 目录1. 准备工作2. 连接mysql数据库使用mysql-connector使用PyMySQL3.

Java中的登录技术保姆级详细教程

《Java中的登录技术保姆级详细教程》:本文主要介绍Java中登录技术保姆级详细教程的相关资料,在Java中我们可以使用各种技术和框架来实现这些功能,文中通过代码介绍的非常详细,需要的朋友可以参考... 目录1.登录思路2.登录标记1.会话技术2.会话跟踪1.Cookie技术2.Session技术3.令牌技

如何搭建并配置HTTPD文件服务及访问权限控制

《如何搭建并配置HTTPD文件服务及访问权限控制》:本文主要介绍如何搭建并配置HTTPD文件服务及访问权限控制的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、安装HTTPD服务二、HTTPD服务目录结构三、配置修改四、服务启动五、基于用户访问权限控制六、

SpringBoot整合Sa-Token实现RBAC权限模型的过程解析

《SpringBoot整合Sa-Token实现RBAC权限模型的过程解析》:本文主要介绍SpringBoot整合Sa-Token实现RBAC权限模型的过程解析,本文给大家介绍的非常详细,对大家的学... 目录前言一、基础概念1.1 RBAC模型核心概念1.2 Sa-Token核心功能1.3 环境准备二、表结

Python如何判断字符串中是否包含特殊字符并替换

《Python如何判断字符串中是否包含特殊字符并替换》这篇文章主要为大家详细介绍了如何使用Python实现判断字符串中是否包含特殊字符并使用空字符串替换掉,文中的示例代码讲解详细,感兴趣的小伙伴可以了... 目录python判断字符串中是否包含特殊字符方法一:使用正则表达式方法二:手动检查特定字符Pytho

SpringBoot后端实现小程序微信登录功能实现

《SpringBoot后端实现小程序微信登录功能实现》微信小程序登录是开发者通过微信提供的身份验证机制,获取用户唯一标识(openid)和会话密钥(session_key)的过程,这篇文章给大家介绍S... 目录SpringBoot实现微信小程序登录简介SpringBoot后端实现微信登录SpringBoo

MySQL精准控制Binlog日志数量的三种方案

《MySQL精准控制Binlog日志数量的三种方案》作为数据库管理员,你是否经常为服务器磁盘爆满而抓狂?Binlog就像数据库的“黑匣子”,默默记录着每一次数据变动,但若放任不管,几天内这些日志文件就... 目录 一招修改配置文件:永久生效的控制术1.定位my.cnf文件2.添加核心参数不重启热更新:高手应

SpringBoot请求参数接收控制指南分享

《SpringBoot请求参数接收控制指南分享》:本文主要介绍SpringBoot请求参数接收控制指南,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Spring Boot 请求参数接收控制指南1. 概述2. 有注解时参数接收方式对比3. 无注解时接收参数默认位置

Python如何精准判断某个进程是否在运行

《Python如何精准判断某个进程是否在运行》这篇文章主要为大家详细介绍了Python如何精准判断某个进程是否在运行,本文为大家整理了3种方法并进行了对比,有需要的小伙伴可以跟随小编一起学习一下... 目录一、为什么需要判断进程是否存在二、方法1:用psutil库(推荐)三、方法2:用os.system调用