真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

java中如何實現(xiàn)自定義SpringSecurity權(quán)限-創(chuàng)新互聯(lián)

創(chuàng)新互聯(lián)www.cdcxhl.cn八線動態(tài)BGP香港云服務(wù)器提供商,新人活動買多久送多久,劃算不套路!

創(chuàng)新互聯(lián)服務(wù)項目包括古塔網(wǎng)站建設(shè)、古塔網(wǎng)站制作、古塔網(wǎng)頁制作以及古塔網(wǎng)絡(luò)營銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢、行業(yè)經(jīng)驗、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,古塔網(wǎng)站推廣取得了明顯的社會效益與經(jīng)濟效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到古塔省份的部分城市,未來相信會繼續(xù)擴大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!

今天就跟大家聊聊有關(guān)java中如何實現(xiàn)自定義Spring Security權(quán)限,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。

背景描述

項目中需要做細粒的權(quán)限控制,細微至url + httpmethod (滿足restful,例如: https://.../xxx/users/1, 某些角色只能查看(HTTP GET), 而無權(quán)進行增改刪(POST, PUT, DELETE))。

表設(shè)計

為避嫌,只列出要用到的關(guān)鍵字段,其余敬請自行腦補。

1.admin_user 管理員用戶表, 關(guān)鍵字段( id, role_id )。

2.t_role 角色表, 關(guān)鍵字段( id, privilege_id )。

3.t_privilege 權(quán)限表, 關(guān)鍵字段( id, url, method )

三個表的關(guān)聯(lián)關(guān)系就不用多說了吧,看字段一眼就能看出。

實現(xiàn)前分析

我們可以逆向思考:

要實現(xiàn)我們的需求,最關(guān)鍵的一步就是讓Spring Security的AccessDecisionManager來判斷所請求的url + httpmethod 是否符合我們數(shù)據(jù)庫中的配置。然而,AccessDecisionManager并沒有來判定類似需求的相關(guān)Voter, 因此,我們需要自定義一個Voter的實現(xiàn)(默認注冊的AffirmativeBased的策略是只要有Voter投出ACCESS_GRANTED票,則判定為通過,這也正符合我們的需求)。實現(xiàn)voter后,有一個關(guān)鍵參數(shù)(Collection

總結(jié)一下思路步驟:

1.自定義voter實現(xiàn)。

2.自定義ConfigAttribute實現(xiàn)。

3.自定義SecurityMetadataSource實現(xiàn)。

4.Authentication包含用戶實例(這個其實不用說,大家應(yīng)該都已經(jīng)這么做了)。

5.自定義GrantedAuthority實現(xiàn)。

項目實戰(zhàn)

1.自定義GrantedAuthority實現(xiàn)

UrlGrantedAuthority.java

public class UrlGrantedAuthority implements GrantedAuthority {

  private final String httpMethod;

  private final String url;

  public UrlGrantedAuthority(String httpMethod, String url) {
    this.httpMethod = httpMethod;
    this.url = url;
  }

  @Override
  public String getAuthority() {
    return url;
  }

  public String getHttpMethod() {
    return httpMethod;
  }

  public String getUrl() {
    return url;
  }

  @Override
  public boolean equals(Object o) {
    if (this == o) return true;
    if (o == null || getClass() != o.getClass()) return false;

    UrlGrantedAuthority target = (UrlGrantedAuthority) o;
    if (httpMethod.equals(target.getHttpMethod()) && url.equals(target.getUrl())) return true;
    return false;
  }

  @Override
  public int hashCode() {
    int result = httpMethod != null ? httpMethod.hashCode() : 0;
    result = 31 * result + (url != null ? url.hashCode() : 0);
    return result;
  }
}

本文題目:java中如何實現(xiàn)自定義SpringSecurity權(quán)限-創(chuàng)新互聯(lián)
網(wǎng)頁URL:http://weahome.cn/article/ceicej.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部