java權限控制,java權限控制到某個字段

本文目錄一覽:

什麼是Java類的訪問權限?

在解釋訪問權限控制之前,先看一個場景。

在學生信息管理系統中,有兩個類,分別是學生類和課程類,課程類提供了課程表和課程安排兩個方法,學生類可以調用課程類提供的課程表查看課程安排,但不能調用課程安排方法,該如何處理,此時就可以利用訪問權限來進行控制。

在Java中,提供了四種訪問權限控制:默認訪問權限(包訪問權限),public,private以及protected。

默認訪問權限(default):即不加任何訪問修飾符,通常稱為「默認訪問模式「。該模式下,只允許在同一個包中進行訪問。

private: 對訪問權限限制的最窄的修飾符,一般稱之為「私有的」。被其修飾的類、屬性以及方法只能被該類的對象訪問,其子類不能訪問,更不能允許跨包訪問。

protect: 介於public 和 private 之間的一種訪問修飾符,一般稱之為「保護的」。被其修飾的類、屬性以及方法只能被類本身的方法及子類訪問,即使子類在不同的包中也可以訪問。

public: Java語言中訪問限制最寬的修飾符,一般稱之為「公共的」。被其修飾的類、屬性以及方法不僅可以跨類訪問,而且允許跨包(package)訪問。下表列出了四種訪問權限的控制粒度:

例1:

Main.java:

package com.cxh.test1; 

public class Main { 

    /**     

    * @param args     */ 

   public static void main(String[]  args) 

   {   

       // TODO Auto-generated method stub

       People     people = new People(“Tom”);     

       System.out.println(people.getName());    

    }

}

People.java

package com.cxh.test1;

class People {   //默認訪問權限(包訪問權限) 

    private String name =  null;

    public People(String name)

    { 

       this.name     = name;   

     }

     public String getName() { 

       return     name; 

     } 

    public void setName(String  name) 

    {        

        this.name     = name;

    }

}

從代碼可以看出,修飾People類採用的是默認訪問權限,而由於People類和Main類在同一個包中,因此People類對於Main類是可見的。

java怎麼實現權限控制

提供一個思路哈:

1、user類中定義兩個方法,分別根據權限名和權限路徑判斷用戶是否有對應權限

2、定義一個攔截器,攔截所有請求,根據路徑判斷是否有操作權限

3、頁面調用user的權限判斷方法,決定是否顯示相應的權限

Java的訪問控制權限有哪幾種?試以類格式形式列出Java的訪問控制。

訪問權限的等級最大到最小依次是:public,protected,包訪問權限(無關鍵字)和private。

成員的訪問權限取得對某成員(屬性和方法)的實現方法有下面四種情況

1, 權限設置為public; 2, 默認包訪問權限,在同一包中的其他類,可以訪問; 3, 權限設置為public或者protected,通過繼承的子類可以訪問; 4, 設置為private,提供訪問器和變異器方法(get/set);

下面介紹這四種權限(相對成員而言)

1, 包訪問權限,在同一包中的類可以訪問; 2, Public:接口訪問權限,任何類都可以訪問; 3, Private:你無法訪問,除了包含該成員的類,其他類都可以訪問。 4, Protected:繼承訪問權限,包括包訪問權限。在同一包中,還有就是子類可以訪問。

類的訪問權限類的訪問

只有兩種:包訪問權限或public(用法同上) 如果不希望其他類擁有該類的訪問權限,可以把這個來說有的構造器制定為private(比如單列模式)。

java如何做權限管理

首先介紹下思路:

1、用戶表 user;

2、角色表 role;

3、菜單 menu;

4、角色菜單權限表 role_menu;

5、用戶菜單權限表 user_menu;

如圖:

根據用戶角色取出該角色所有權限,並對用戶進行權限分配;注意菜單的按鈕(新增、刪除、修改)權限是放在中間表(user_menu)中的;

1、新增用戶時,是要根據用戶角色進行分配權限的 一定記得批量添加;批量、批量、批量,重要的事情說三遍,不要查詢角色權限,然後for循環,這樣效率太低了;

SQL如下:

INSERT INTO sys_user_menu(UserId, MenuId, DelPower,    UpdPower,    InsPower,    ViewPower)

SELECT #{userId} UserId, MenuId, 1 DelPower, 1 UpdPower, 1 InsPower, 1 ViewPower FROM sys_role_menu WHERE RoelId = #{roleId}

updPower 默認都是有的 所以都是1,這樣根據角色查詢出權限直接添加,響應時間大大提升;

2、修改用戶角色也要記得重新分配用戶權限哦!這個不能忘,可以用上面的方法;

業務方法:

如果角色沒有修改,是不用重新分配權限的,所有userRole 重置為 null,如果角色修改則刪除原權限,重新進行分配;

3、最後要優化的就是根據用戶查詢權限的時候啦,我最開始是這樣做的,查詢角色權限,用戶權限,返回到前端,前端進行處理;結果就是很卡 基本上要三到四秒,

解決方案,一步到位;一個查詢返回全部數據。

如下SQL:

SELECT menu.MenuId id, ParentId pid, MenuName text,

(SELECT COUNT(1) FROM sys_user_menu WHERE UserId = #{userId} AND  MenuId = sm.MenuId) isShow,

(SELECT CONCAT(

(CASE WHEN smenu.InsPower = 1 THEN 1 ELSE 0 END), ‘,’,

(CASE WHEN smenu.DelPower = 1 THEN 1 ELSE 0 END), ‘,’,

(CASE WHEN smenu.UpdPower = 1 THEN 1 ELSE 0 END), ‘,’,

(CASE WHEN smenu.ViewPower = 1 THEN 1 ELSE 0 END))

FROM sys_user_menu smenu WHERE smenu.UserId = #{userId}

AND  smenu.MenuId = sm.MenuId) MenuInfo

FROM sys_role_menu sm INNER JOIN sys_menu menu on sm.MenuId = menu.MenuId

WHERE RoelId = #{roleId}

首先根據 角色ID查詢出權限,然後子查詢用戶是否有該權限,有返回1 木用返回 0;

最後按鈕權限 我是直接拼接成字符串,分別對應 添加、刪除、修改、查看 1 有該按鈕 0 沒有該按鈕;

優化後 不管是添加、修改用戶,加載用戶權限都能控制在 1~2 秒;

原創文章,作者:AEKQ,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/145140.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
AEKQ的頭像AEKQ
上一篇 2024-10-26 11:56
下一篇 2024-10-26 11:56

相關推薦

  • Java JsonPath 效率優化指南

    本篇文章將深入探討Java JsonPath的效率問題,並提供一些優化方案。 一、JsonPath 簡介 JsonPath是一個可用於從JSON數據中獲取信息的庫。它提供了一種DS…

    編程 2025-04-29
  • java client.getacsresponse 編譯報錯解決方法

    java client.getacsresponse 編譯報錯是Java編程過程中常見的錯誤,常見的原因是代碼的語法錯誤、類庫依賴問題和編譯環境的配置問題。下面將從多個方面進行分析…

    編程 2025-04-29
  • Java騰訊雲音視頻對接

    本文旨在從多個方面詳細闡述Java騰訊雲音視頻對接,提供完整的代碼示例。 一、騰訊雲音視頻介紹 騰訊雲音視頻服務(Cloud Tencent Real-Time Communica…

    編程 2025-04-29
  • Java Bean加載過程

    Java Bean加載過程涉及到類加載器、反射機制和Java虛擬機的執行過程。在本文中,將從這三個方面詳細闡述Java Bean加載的過程。 一、類加載器 類加載器是Java虛擬機…

    編程 2025-04-29
  • Java Milvus SearchParam withoutFields用法介紹

    本文將詳細介紹Java Milvus SearchParam withoutFields的相關知識和用法。 一、什麼是Java Milvus SearchParam without…

    編程 2025-04-29
  • Java 8中某一周的周一

    Java 8是Java語言中的一個版本,於2014年3月18日發佈。本文將從多個方面對Java 8中某一周的周一進行詳細的闡述。 一、數組處理 Java 8新特性之一是Stream…

    編程 2025-04-29
  • Java判斷字符串是否存在多個

    本文將從以下幾個方面詳細闡述如何使用Java判斷一個字符串中是否存在多個指定字符: 一、字符串遍歷 字符串是Java編程中非常重要的一種數據類型。要判斷字符串中是否存在多個指定字符…

    編程 2025-04-29
  • VSCode為什麼無法運行Java

    解答:VSCode無法運行Java是因為默認情況下,VSCode並沒有集成Java運行環境,需要手動添加Java運行環境或安裝相關插件才能實現Java代碼的編寫、調試和運行。 一、…

    編程 2025-04-29
  • Java任務下發回滾系統的設計與實現

    本文將介紹一個Java任務下發回滾系統的設計與實現。該系統可以用於執行複雜的任務,包括可回滾的任務,及時恢復任務失敗前的狀態。系統使用Java語言進行開發,可以支持多種類型的任務。…

    編程 2025-04-29
  • Java 8 Group By 會影響排序嗎?

    是的,Java 8中的Group By會對排序產生影響。本文將從多個方面探討Group By對排序的影響。 一、Group By的概述 Group By是SQL中的一種常見操作,它…

    編程 2025-04-29

發表回復

登錄後才能評論