国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

再見了shiro

jf_ro2CN3Fa ? 來源:CSDN ? 2023-01-15 11:32 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群


前言

作為一名后臺開發人員,權限這個名詞應該算是特別熟悉的了。就算是java里的類也有 public、private 等“權限”之分。之前項目里一直使用shiro作為權限管理的框架。說實話,shiro的確挺強大的,但是它也有很多不好的地方。shiro默認的登錄地址還是login.jsp,前后端分離模式使用shiro還要重寫好多類;手機端存儲用戶信息、保持登錄狀態等等,對shiro來說也是一個難題。

在分布式項目里,比如電商項目,其實不太需要明確的權限劃分,說白了,我認為沒必要做太麻煩的權限管理,一切從簡。何況shiro對于springCloud等各種分布式框架來說,簡直就是“災難”。每個子系統里都要寫點shiro的東西,慢慢的,越來越惡心。zuul網關就在這里大顯身手了,控制用戶的登錄,鑒定用戶的權限等等。zuul網關控制用戶登錄,鑒權以后再詳說。以上拙見。

然后最近我發現了另一個權限框架jcasbin,雖然網上還沒有很多關于博客,但是我看了一會就可以使用了。

順手貼上github地址:https://github.com/casbin/jcasbin

基于 Spring Boot + MyBatis Plus + Vue & Element 實現的后臺管理系統 + 用戶小程序,支持 RBAC 動態權限、多租戶、數據權限、工作流、三方登錄、支付、短信、商城等功能

  • 項目地址:https://github.com/YunaiV/ruoyi-vue-pro
  • 視頻教程:https://doc.iocoder.cn/video/

一、準備

基于springboot1.5.10,但是和springboot關系不太大,所以版本可以忽略,用你熟悉的springboot版本就行。

1、mavan倉庫引入


org.casbin
jcasbin
1.1.0


org.casbin
jdbc-adapter
1.1.0

2、配置文件

jcasbin把用戶的角色、權限信息(訪問路徑)放置在配置文件里,然后通過輸入流讀取配置文件。主要有兩個配置文件:model.confpolicy.csv。簡單的使用GitHub里都講了,在此就不再贅述了。

其實也可以讀取數據庫的角色權限配置。所以我們可以把關于數據庫的信息提取出來,可以進行動態設置。

@Configuration
@ConfigurationProperties(prefix="org.jcasbin")
publicclassEnforcerConfigProperties{

privateStringurl;

privateStringdriverClassName;

privateStringusername;

privateStringpassword;

privateStringmodelPath;

publicStringgetUrl(){
returnurl;
}

publicvoidsetUrl(Stringurl){
this.url=url;
}

publicStringgetDriverClassName(){
returndriverClassName;
}

publicvoidsetDriverClassName(StringdriverClassName){
this.driverClassName=driverClassName;
}

publicStringgetUsername(){
returnusername;
}

publicvoidsetUsername(Stringusername){
this.username=username;
}

publicStringgetPassword(){
returnpassword;
}

publicvoidsetPassword(Stringpassword){
this.password=password;
}

publicStringgetModelPath(){
returnmodelPath;
}

publicvoidsetModelPath(StringmodelPath){
this.modelPath=modelPath;
}

@Override
publicStringtoString(){
return"EnforcerConfigProperties[url="+url+",driverClassName="+driverClassName+",username="
+username+",password="+password+",modelPath="+modelPath+"]";
}

}

這樣我們就可以在application.properties里進行相關配置了。model.conf是固定的文件,之間復制過來放在新建的和src同級的文件夾下即可。policy.csv的內容是可以從數據庫讀取的。

org.jcasbin.url=jdbc//localhost:3306/casbin?useSSL=false
org.jcasbin.driver-class-name=com.mysql.jdbc.Driver
org.jcasbin.username=root
org.jcasbin.password=root
org.jcasbin.model-path=conf/authz_model.conf

基于 Spring Cloud Alibaba + Gateway + Nacos + RocketMQ + Vue & Element 實現的后臺管理系統 + 用戶小程序,支持 RBAC 動態權限、多租戶、數據權限、工作流、三方登錄、支付、短信、商城等功能

  • 項目地址:https://github.com/YunaiV/yudao-cloud
  • 視頻教程:https://doc.iocoder.cn/video/

二、讀取權限信息進行初始化

我們要對Enforcer這個類初始化,加載配置文件里的信息。所以我們寫一個類實現InitializingBean,在容器加載的時候就初始化這個類,方便后續的使用。

@Component
publicclassEnforcerFactoryimplementsInitializingBean{

privatestaticEnforcerenforcer;

@Autowired
privateEnforcerConfigPropertiesenforcerConfigProperties;
privatestaticEnforcerConfigPropertiesconfig;

@Override
publicvoidafterPropertiesSet()throwsException{
config=enforcerConfigProperties;
//從數據庫讀取策略
JDBCAdapterjdbcAdapter=newJDBCAdapter(config.getDriverClassName(),config.getUrl(),config.getUsername(),
config.getPassword(),true);
enforcer=newEnforcer(config.getModelPath(),jdbcAdapter);
enforcer.loadPolicy();//LoadthepolicyfromDB.
}

/**
*添加權限
*@parampolicy
*@return
*/
publicstaticbooleanaddPolicy(Policypolicy){
booleanaddPolicy=enforcer.addPolicy(policy.getSub(),policy.getObj(),policy.getAct());
enforcer.savePolicy();

returnaddPolicy;
}

/**
*刪除權限
*@parampolicy
*@return
*/
publicstaticbooleanremovePolicy(Policypolicy){
booleanremovePolicy=enforcer.removePolicy(policy.getSub(),policy.getObj(),policy.getAct());
enforcer.savePolicy();

returnremovePolicy;
}

publicstaticEnforcergetEnforcer(){
returnenforcer;
}


}

在這個類里,我們注入寫好的配置類,然后轉為靜態的,在afterPropertiesSet方法里實例化Enforcer并加載policy(策略,角色權限/url對應關系)。

同時又寫了兩個方法,用來添加和刪除policy,Policy是自定的一個類,對官方使用的集合/數組進行了封裝。

publicclassPolicy{
/**想要訪問資源的用戶或者角色*/
privateStringsub;

/**將要訪問的資源,可以使用*作為通配符,例如/user/**/
privateStringobj;

/**用戶對資源執行的操作。HTTP方法,GET、POST、PUT、DELETE等,可以使用*作為通配符*/
privateStringact;

publicPolicy(){
super();
}

/**
*
*@paramsub想要訪問資源的用戶或者角色
*@paramobj將要訪問的資源,可以使用*作為通配符,例如/user/*
*@paramact用戶對資源執行的操作。HTTP方法,GET、POST、PUT、DELETE等,可以使用*作為通配符
*/
publicPolicy(Stringsub,Stringobj,Stringact){
super();
this.sub=sub;
this.obj=obj;
this.act=act;
}

publicStringgetSub(){
returnsub;
}

publicvoidsetSub(Stringsub){
this.sub=sub;
}

publicStringgetObj(){
returnobj;
}

publicvoidsetObj(Stringobj){
this.obj=obj;
}

publicStringgetAct(){
returnact;
}

publicvoidsetAct(Stringact){
this.act=act;
}

@Override
publicStringtoString(){
return"Policy[sub="+sub+",obj="+obj+",act="+act+"]";
}

}

三、使用

1、權限控制

jcasbin的權限控制非常簡單,自定義一個過濾器,if判斷就可以搞定,沒錯,就這么簡單。

@WebFilter(urlPatterns="/*",filterName="JCasbinAuthzFilter")
@Order(Ordered.HIGHEST_PRECEDENCE)//執行順序,最高級別最先執行,int從小到大
publicclassJCasbinAuthzFilterimplementsFilter{

privatestaticfinalLoggerlog=LoggerFactory.getLogger(JCasbinAuthzFilter.class);

privatestaticEnforcerenforcer;

@Override
publicvoidinit(FilterConfigfilterConfig)throwsServletException{
}

@Override
publicvoiddoFilter(ServletRequestservletRequest,ServletResponseservletResponse,FilterChainchain)
throwsIOException,ServletException{
HttpServletRequestrequest=(HttpServletRequest)servletRequest;
HttpServletResponseresponse=(HttpServletResponse)servletResponse;

Stringuser=request.getParameter("username");
Stringpath=request.getRequestURI();
Stringmethod=request.getMethod();

enforcer=EnforcerFactory.getEnforcer();
if(path.contains("anon")){
chain.doFilter(request,response);
}elseif(enforcer.enforce(user,path,method)){
chain.doFilter(request,response);
}else{
log.info("無權訪問");
Mapresult=newHashMap();
result.put("code",1001);
result.put("msg","用戶權限不足");
result.put("data",null);
response.setCharacterEncoding("UTF-8");
response.setContentType("application/json");
response.getWriter().write(JSONObject.toJSONString(result,SerializerFeature.WriteMapNullValue));
}

}

@Override
publicvoiddestroy(){

}

}

主要是用enforcer.enforce(user, path, method)這個方法對用戶、訪問資源、方式進行匹配。這里的邏輯可以根據自己的業務來實現。在這個過濾器之前還可以添加一個判斷用戶是否登錄的過濾器。

2、添加刪除權限

對于權限的操作,直接調用上面寫好的EnforcerFactory里對應的方法即可。并且,可以達到同步的效果。就是不用重啟服務器或者其他任何操作,添加或刪除用戶權限后,用戶對應的訪問就會收到影響。

@PutMapping("/anon/role/per")
publicResultBOaddPer(){

EnforcerFactory.addPolicy(newPolicy("alice","/user/list","*"));

returnResultTool.success();
}

@DeleteMapping("/anon/role/per")
publicResultBOdeletePer(){

EnforcerFactory.removePolicy(newPolicy("alice","/user/list","*"));

returnResultTool.success();
}

		

寫在后面的話

其實可以把jcasbin和SpringCloud的zuul結合來實現用戶的統一登錄和權限控制。自定義一個過濾器繼承ZuulFilter即可,其他地方基本沒啥區別。

審核編輯 :李倩


聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 框架
    +關注

    關注

    0

    文章

    404

    瀏覽量

    18421
  • spring
    +關注

    關注

    0

    文章

    341

    瀏覽量

    15935
  • 過濾器
    +關注

    關注

    1

    文章

    444

    瀏覽量

    20964

原文標題:再見了 shiro

文章出處:【微信號:芋道源碼,微信公眾號:芋道源碼】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    2025年度回顧。再見2025、你好2026,公眾智能為電力運行安全服務每一天。

    行業資訊
    jf_31914488
    發布于 :2025年12月31日 18:13:41

    為什么會有TCP/IP協議?

    ,計算機只是單兵作戰并不會發揮太大的作用。 只有把它們聯合起來,電腦才會發揮出它最大的潛力。于是人們就想方設法的用電線把電腦連接到了一起。 但是簡單的連到一起是遠遠不夠的,就好像語言不同的兩個人互相見了
    發表于 12-03 06:28

    KiCon Asia 2025 完美落幕,相約明年再見

    “ ?3 天緊湊的活動完美落幕!一場培訓,16個主題演講。更重要的是,來自全球各地的喜歡 KiCad 的小伙伴們可以聚在一起,互相交流,暢所欲言。? ” ? 未能現場參加的小伙伴可以掃碼查看現場的照片: 演講的視頻和 PPT 整理后會在公眾號分享。 讓我們一起回顧下會議的過程... 11月13日 培訓 這次培訓比去年更精彩,Seth 同學分享了很多在文檔上找不到的技巧,帶大家完整設計了一個 USB 電路。相信所有的小伙伴都受益匪淺。 11月14~15日 主題演講 1. Ki
    的頭像 發表于 11-16 11:20 ?428次閱讀
    KiCon Asia 2025 完美落幕,相約明年<b class='flag-5'>再見</b>!

    安達發|用APS自動排程,對玻璃加工“拖期”說再見

    在競爭日益激烈的制造業環境中,玻璃加工行業正面臨著前所未有的挑戰。多品種、小批量、短交期的訂單模式已成為常態,從原片切割、磨邊、鉆孔,到鋼化、鍍膜、絲印等復雜工藝,生產環節環環相扣,任何一個環節的延遲都可能引發連鎖反應,導致訂單交付延誤、庫存積壓、生產成本飆升。如何打破生產計劃與調度的瓶頸? APS自動排程 系統的引入,正成為玻璃加工企業邁向智能化、數字化管理,贏得市場競爭力的關鍵一步。 玻璃加工行業傳統排
    的頭像 發表于 11-10 11:10 ?325次閱讀
    安達發|用APS自動排程,對玻璃加工“拖期”說<b class='flag-5'>再見</b>

    科技如塵,攜光共舞。有光的地方,就有效率的舞步

    ;到"釷"的歷史性跨越。這釷基熔鹽堆,猶如沉睡后覺醒的雄獅,無聲卻有力,以高溫熔鹽為冷卻劑,無需巨大壓力容器,也不用大量水冷卻。這正如那黑暗中的炬火,照見了中國科技自主創新的道路。西
    的頭像 發表于 11-04 11:59 ?503次閱讀
    科技如塵,攜光共舞。有光的地方,就有效率的舞步

    東軟集團受邀出席第三屆亞洲愿景論壇

    近日,第三屆亞洲愿景論壇(Asia New Vision Forum)在新加坡召開。期間,新加坡副總理兼貿工部長顏金勇(Gan Kim Yong)出席論壇并會見了東軟集團總裁蓋龍佳等企業代表,就亞洲經濟的發展趨勢和挑戰、亞洲企業在新加坡的投資與發展等話題進行交流。
    的頭像 發表于 09-16 14:36 ?932次閱讀

    臺式電腦盤符不見了#

    前段時間電腦運行速度突然變得特別慢,小毛病不斷,后來CDE盤盤符也不見了,于是就重裝了系統,剛好了兩天,今天一開電腦就發現CDE盤符上有感嘆號,于是做了磁盤檢查,完了說要重啟電腦,結果重啟完電腦這幾個盤符又不見了,該怎么辦?
    發表于 08-28 20:50

    廣西壯族自治區領導蒞臨有方科技參觀交流

    近日,廣西壯族自治區黨委書記、自治區人大常委會主任陳剛在南寧會見了深圳市有方科技股份有限公司董事長兼總經理王慷一行。雙方圍繞深化城市物聯感知體系建設、AI硬件終端、場景AI解決方案、延伸具身人形機器人產業鏈等方面的議題進行了交流。
    的頭像 發表于 08-12 11:42 ?1031次閱讀

    西班牙政府考察團點贊德賽西威智能工廠

    近日,德賽西威成為西班牙媒體關注的焦點,該國政府高級官員接連組團式現場視察并會見了德賽西威執行副總裁凌劍輝,盛贊德賽西威位于西班牙安達盧西亞州利納雷斯市的智能工廠項目,高度肯定了該項目對推動當地經濟、提升就業,乃至西班牙汽車產業發展的重要意義。
    的頭像 發表于 07-09 14:59 ?1155次閱讀

    CYW43907系列在ModusToolbox的工程是否可以移植到Keil uVision中?

    CYW43907系列在ModusToolbox的工程是否可以移植到Keil uVision中,看見了官方推出的移植文檔,但是不知道是否支持此芯片
    發表于 07-08 06:48

    精彩回顧 | TOSUN同星2025歐洲汽車測試展圓滿落幕,期待下次再見

    5月20-22日,全球汽車測試技術盛會——歐洲汽車測試展(EuropeanAutomotiveTestingExpo2025)在德國圓滿落幕。作為汽車電子基礎工具鏈領域領先企業,TOSUN同星攜多領域測試解決方案及最新發布產品矩陣重磅亮相,吸引了眾多國際客戶與行業專家的高度關注。現場直擊ExhibitionSite展會期間,TOSUN同星展臺吸引了來自來自歐
    的頭像 發表于 05-23 20:06 ?708次閱讀
    精彩回顧 | TOSUN同星2025歐洲汽車測試展圓滿落幕,期待下次<b class='flag-5'>再見</b>!

    巴西總統盧拉會見長城汽車

    近日,在華訪問的巴西總統盧拉會見了長城汽車董事長魏建軍。作為汽車產業的代表,魏建軍就在巴西投資布局項目的最新成果以及合規、誠信的經營理念與盧拉總統進行了深入交流,盧拉總統對此給予了高度贊賞和支持。會談期間,雙方還就長城汽車在巴西的進一步發展達成共識。
    的頭像 發表于 05-16 15:51 ?715次閱讀

    云知聲積極推動廈門人工智能產業發展

    近日,廈門市市長伍斌在市政府會見了云知聲創始人、CEO黃偉一行。雙方就深化合作、共促廈門人工智能產業發展進行交流。
    的頭像 發表于 04-22 16:19 ?730次閱讀

    單片機編程關鍵字之volatile

    volatile 修飾的變量是說這變量可能會被意想不到地改變。通常對于程序員而言,單片機 中用的就算常見了volatile 是易變的,不穩定的意思。其實對于很多人來說,根本沒見過這個關鍵字,不 知道
    發表于 04-02 13:47 ?2次下載

    機器人的眼眸中,vivo看見了怎樣的未來?

    從手機到機器人/MR,vivo對下一代交互的升維思考
    的頭像 發表于 03-27 09:24 ?2430次閱讀
    機器人的眼眸中,vivo看<b class='flag-5'>見了</b>怎樣的未來?