粗粒度許可權控制(攔截是否登錄、攔截用戶名admin許可權)

来源:http://www.cnblogs.com/gdwkong/archive/2017/10/07/7635552.html
-Advertisement-
Play Games

RBAC --> 基於角色的許可權控制 tb_user tb_role tb_userrole tb_menu(增、刪、改、查) tb_rolemenu 1 說明 給出三個頁面:index.jsp、user.jsp、admin.jsp。 index.jsp:誰都可以訪問,沒有限制; user.jsp: ...


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: Mac
 5   Date: 13/09/2017
 6   Time: 1:22 PM
 7   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 }

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 對於PHP開發者來說,一旦某個產品投入使用,應該立即將 display_errors選項關閉,以免因為這些錯誤所透露的路徑、資料庫連接、數據表等信息而遭到黑客攻擊。但是,任何一個產品在投入使用後,都難 免會有錯誤出現,那麼如何記錄一些對開發者有用的錯誤報告呢?我們可以在單獨的文本文件中將錯誤報告作為 ...
  • php有哪幾種錯誤提示 1.notice : 註意 2.waring : 警告 3.error : 錯誤 PHP中都有哪幾種查錯方法? 1、語法檢查--php配置文件里,把錯誤顯示選項都打開或者代碼開始部分,加error_reporting(E_ALL)2、邏輯檢查--設置斷點,在斷點前寫日誌 er ...
  • 大學畢業後筆者進入一家外企,做企業CRM系統開發,那時候開發效率最高的高級程式語言,毫無疑問是C#。恰逢公司也在擴張,招聘了不少.net程式員,筆者作為應屆生,也樂呵呵的加入到.net程式員行列中。 C#.net非常容易上手,之前在大學里,做過winform和webform開發,也曾經在老師那裡承接 ...
  • Too Rich Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others)Total Submission(s): 1410 Accepted Submission(s): 362 Probl ...
  • SpringBoot引入JPA,application.ymlapplication.yml增加資料庫鏈接參數,啟動卡死,日誌沒有動,如下圖 折騰好久,後面發現用 Maven的package 過程中 可以看出資料庫名稱出錯,如下圖 這時候再啟動,發現控制台日誌也有了看出資料庫名稱出錯。 最後實驗下, ...
  • 最近需要做一個粗略的後臺管理的許可權,根據用戶的等級來載入相應的菜單,控制到子菜單。使用的是Easyui這個框架。 1.我使用的mysql資料庫。在這裡我就建立四張表,角色表(tb_users),菜單表(tb_menu),用戶許可權表(tb_role),許可權菜單表(tb_user_role).表結構如下 ...
  • 在 java平臺上,lombok 提供了簡單的註解的形式來幫助我們消除一些必須有但看起來很臃腫的代碼, 比如屬性的get/set,及對象的toString等方法,特別是相對於 POJO。簡單的說,就是簡化了Java代碼,消除Java冗長的代碼。lombok jar的下載地址:https://proj ...
  • 把泛型由Boolean改為String。 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...