国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

spring boot 權(quán)限管理的幾種方式

這篇具有很好參考價(jià)值的文章主要介紹了spring boot 權(quán)限管理的幾種方式。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

Spring Boot 提供了多種權(quán)限管理方式,以下是幾種常見的方法,以及相應(yīng)的示例:

  1. 基于角色的訪問控制(Role-Based Access Control,RBAC)

在基于角色的訪問控制中,權(quán)限分配給角色,然后將角色分配給用戶。這種方法簡化了權(quán)限管理,因?yàn)槟恍枰芾斫巧陀脩糁g的關(guān)系。

示例:使用 Spring Security 實(shí)現(xiàn) RBAC

1.1. 添加 Spring Security 依賴項(xiàng)到 pom.xml

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-security</artifactId>
</dependency>

1.2. 創(chuàng)建一個(gè) SecurityConfig 類,繼承 WebSecurityConfigurerAdapter,并配置角色和權(quán)限:

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests()
            .antMatchers("/admin/**").hasRole("ADMIN")
            .antMatchers("/user/**").hasAnyRole("ADMIN", "USER")
            .antMatchers("/").permitAll()
            .and().formLogin();
    }

    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.inMemoryAuthentication()
            .withUser("admin").password(passwordEncoder().encode("admin123")).roles("ADMIN")
            .and()
            .withUser("user").password(passwordEncoder().encode("user123")).roles("USER");
    }

    @Bean
    public PasswordEncoder passwordEncoder() {
        return new BCryptPasswordEncoder();
    }
}
  1. 基于屬性的訪問控制(Attribute-Based Access Control,ABAC)

在基于屬性的訪問控制中,權(quán)限是基于用戶、資源和環(huán)境屬性的。這種方法提供了更細(xì)粒度的權(quán)限控制,但可能更難管理。

示例:使用 Spring Security 的 @PreAuthorize 實(shí)現(xiàn) ABAC

2.1. 在 SecurityConfig 類中啟用方法安全性:

@EnableGlobalMethodSecurity(prePostEnabled = true)

2.2. 在需要保護(hù)的方法上添加 @PreAuthorize 注解:

@RestController
@RequestMapping("/api")
public class ApiController {

    @PreAuthorize("hasRole('ADMIN')")
    @GetMapping("/admin")
    public String admin() {
        return "Admin area";
    }

    @PreAuthorize("hasRole('USER')")
    @GetMapping("/user")
    public String user() {
        return "User area";
    }
}
  1. 基于訪問控制列表(Access Control List,ACL)

在基于訪問控制列表的權(quán)限管理中,為每個(gè)資源定義一個(gè)訪問控制列表,指定哪些用戶或角色可以訪問該資源。這種方法適用于需要對每個(gè)資源進(jìn)行細(xì)粒度控制的場景。

示例:使用 Spring Security 的 ACL 模塊實(shí)現(xiàn) ACL

3.1. 添加 Spring Security ACL 依賴項(xiàng)到 pom.xml

<dependency>
    <groupId>org.springframework.security</groupId>
    <artifactId>spring-security-acl</artifactId>
    <version>5.6.1</version>
</dependency>

3.2. 配置 ACL 數(shù)據(jù)源、服務(wù)和權(quán)限評估器:

@Configuration
public class AclConfig {

    @Autowired
    private DataSource dataSource;

    @Bean
    public JdbcMutableAclService aclService() {
        return new JdbcMutableAclService(dataSource, lookupStrategy(), aclCache());
    }

    @Bean
    public AclAuthorizationStrategy aclAuthorizationStrategy() {
        return new AclAuthorizationStrategyImpl(new SimpleGrantedAuthority("ROLE_ADMIN"));
    }

    @Bean
    public PermissionGrantingStrategy permissionGrantingStrategy() {
        return new DefaultPermissionGrantingStrategy(new ConsoleAuditLogger());
    }

    @Bean
    public EhCacheBasedAclCache aclCache() {
        return new EhCacheBasedAclCache(ehCacheFactoryBean().getObject(), permissionGrantingStrategy(), aclAuthorizationStrategy());
    }

    @Bean
    public EhCacheFactoryBean ehCacheFactoryBean() {
        EhCacheFactoryBean factoryBean = new EhCacheFactoryBean();
        factoryBean.setCacheManager(cacheManager().getObject());
        factoryBean.setCacheName("aclCache");
        return factoryBean;
    }

    @Bean
    public EhCacheManagerFactoryBean cacheManager() {
        return new EhCacheManagerFactoryBean();
    }

    @Bean
    public LookupStrategy lookupStrategy() {
        return new BasicLookupStrategy(dataSource, aclCache(), aclAuthorizationStrategy(), new ConsoleAuditLogger());
    }

    @Bean
    public AclPermissionEvaluator permissionEvaluator() {
        return new AclPermissionEvaluator(aclService());
    }
}

3.3. 在需要保護(hù)的方法上添加 @PreAuthorize 注解,使用 hasPermission 表達(dá)式:

@PreAuthorize("hasPermission(#resourceId, 'com.example.Resource', 'read')")
@GetMapping("/resource/{resourceId}")
public String getResource(@PathVariable Long resourceId) {
    return "Resource " + resourceId;
}

這些示例僅用于演示 Spring Boot 中權(quán)限管理的幾種方式。實(shí)際應(yīng)用中,您可能需要根據(jù)項(xiàng)目需求進(jìn)行更詳細(xì)的配置和實(shí)現(xiàn)。文章來源地址http://www.zghlxwxcb.cn/news/detail-614636.html

到了這里,關(guān)于spring boot 權(quán)限管理的幾種方式的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • SpringBoot面試題8:運(yùn)行 Spring Boot 有哪幾種方式?Spring Boot 需要獨(dú)立的容器運(yùn)行嗎?

    SpringBoot面試題8:運(yùn)行 Spring Boot 有哪幾種方式?Spring Boot 需要獨(dú)立的容器運(yùn)行嗎?

    該文章專注于面試,面試只要回答關(guān)鍵點(diǎn)即可,不需要對框架有非常深入的回答,如果你想應(yīng)付面試,是足夠了,抓住關(guān)鍵點(diǎn) 運(yùn)行Spring Boot應(yīng)用有多種方式,具體取決于你的需求和環(huán)境。以下是幾種常見的運(yùn)行Spring Boot應(yīng)用的方式: 使用IDE運(yùn)行:可以在常用的Java開發(fā)環(huán)境(如

    2024年02月06日
    瀏覽(22)
  • Java(SpringBoot)項(xiàng)目打包(構(gòu)建)成`Docker`鏡像的幾種方式

    Java(SpringBoot)項(xiàng)目打包(構(gòu)建)成`Docker`鏡像的幾種方式

    前置說明 最為原始的打包方式 spring-boot-maven-plugin 插件 jib-maven-plugin 插件 dockerfle-maven-plugin 插件 最為原始的方式 也就是使用 Docker 的打包命令去打包,麻煩,我這里不多說。 spring-boot-maven-plugin插件打包 SpringBoot自己內(nèi)置了一個(gè) Docker 鏡像打包工具,在 spring-boot-starter-parent 中,

    2024年02月02日
    瀏覽(24)
  • 深入了解 Spring boot的事務(wù)管理機(jī)制:掌握 Spring 事務(wù)的幾種傳播行為、隔離級別和回滾機(jī)制,理解 AOP 在事務(wù)管理中的應(yīng)用

    深入了解 Spring boot的事務(wù)管理機(jī)制:掌握 Spring 事務(wù)的幾種傳播行為、隔離級別和回滾機(jī)制,理解 AOP 在事務(wù)管理中的應(yīng)用

    ????歡迎光臨,終于等到你啦???? ??我是蘇澤,一位對技術(shù)充滿熱情的探索者和分享者。???? ??持續(xù)更新的專欄 《Spring 狂野之旅:從入門到入魔》 ?? 本專欄帶你從Spring入門到入魔 ? 這是蘇澤的個(gè)人主頁可以看到我其他的內(nèi)容哦???? 努力的蘇澤 http://suzee.blog.csdn

    2024年03月21日
    瀏覽(24)
  • Spring Boot 優(yōu)雅停止服務(wù)的幾種方法

    Spring Boot 優(yōu)雅停止服務(wù)的幾種方法

    在使用Springboot的時(shí)候,都要涉及到服務(wù)的停止和啟動(dòng),當(dāng)我們停止服務(wù)的時(shí)候,很多時(shí)候大家都是kill -9 直接把程序進(jìn)程殺掉,這樣程序不會(huì)執(zhí)行優(yōu)雅的關(guān)閉。而且一些沒有執(zhí)行完的程序就會(huì)直接退出。 我們很多時(shí)候都需要安全的將服務(wù)停止,也就是把沒有處理完的工作繼續(xù)

    2024年02月10日
    瀏覽(19)
  • springboot接收參數(shù)的幾種方式

    springboot接收參數(shù)的幾種方式

    傳參格式:?號傳參,在地址欄上加參數(shù) 傳參格式:請求體傳參 form-data的請求是在body中,為key=value格式,同時(shí)可以傳文件,Content-Type為multipart/form-data,后端可以用@RequestParam接收。 json傳參也是在body當(dāng)中,只不過json是一種數(shù)據(jù)格式,后端可以用@RequestBody接收。 地址欄傳參,

    2024年02月10日
    瀏覽(23)
  • SpringBoot讀取配置的幾種方式

    SpringBoot讀取配置的幾種方式

    1.第一種@Value 注意:static和final修飾的變量不生效 2.通過@ConfigurationProperties(prefix=“”) ? 適用于對對象多個(gè)變量統(tǒng)一綁定,比@Value高效 3.通過Environment Spring底層提供的API動(dòng)態(tài)獲取變量值 ? ?4.通過@PropertySources獲取外部文件路徑,再通過@Value獲取值? 只能讀取properties文件

    2024年02月15日
    瀏覽(25)
  • 玩轉(zhuǎn)SpringBoot:SpringBoot的幾種定時(shí)任務(wù)實(shí)現(xiàn)方式

    在現(xiàn)代軟件開發(fā)中,定時(shí)任務(wù)是一種常見的需求,用于執(zhí)行周期性的任務(wù)或在特定的時(shí)間點(diǎn)執(zhí)行任務(wù)。這些任務(wù)可能涉及數(shù)據(jù)同步、數(shù)據(jù)備份、報(bào)表生成、緩存刷新等方面,對系統(tǒng)的穩(wěn)定性和可靠性有著重要的影響。 Spring Boot 提供了強(qiáng)大且簡單的定時(shí)任務(wù)功能,使開發(fā)人員能

    2024年03月09日
    瀏覽(28)
  • springboot接收前端參數(shù)的幾種方式

    springboot接收前端參數(shù)的幾種方式

    目錄 第一種:直接在方法中指定參數(shù) 第二種:使用@requesrParam注解 第三種方法:基于@pathVariable? 第四種方法:基于@ResquestBody 在開始之前,我們需要一下準(zhǔn)備工作,創(chuàng)建數(shù)據(jù)庫,springboot工程,添加依賴,配置文件,使用的技術(shù)有mybatisplus,springboot,maven,mysql。 首先,數(shù)據(jù)庫

    2024年02月07日
    瀏覽(23)
  • SpringBoot實(shí)現(xiàn)異步調(diào)用的幾種方式

    SpringBoot實(shí)現(xiàn)異步調(diào)用的幾種方式

    一、使用 CompletableFuture 實(shí)現(xiàn)異步任務(wù) CompletableFuture 是 Java 8 新增的一個(gè)異步編程工具,它可以方便地實(shí)現(xiàn)異步任務(wù)。使用 CompletableFuture 需要滿足以下條件: 異步任務(wù)的返回值類型必須是 CompletableFuture 類型; 在異步任務(wù)中使用 CompletableFuture.supplyAsync() 或 CompletableFuture.runAsy

    2024年02月08日
    瀏覽(23)
  • SpringBoot 中實(shí)現(xiàn)定時(shí)任務(wù)的幾種方式

    SpringBoot 中實(shí)現(xiàn)定時(shí)任務(wù)的幾種方式

    定時(shí)任務(wù)在我們項(xiàng)目開發(fā)中也是很重要的,對于某些場景必須要用定時(shí)任務(wù) ,如定時(shí)發(fā)送郵件啊,定時(shí)統(tǒng)計(jì)數(shù)據(jù)等,這篇文章主要講講項(xiàng)目中實(shí)現(xiàn)定時(shí)任務(wù)的幾種方式。 這種方式很簡單,主要就是先@EnableScheduling開啟定時(shí)任務(wù)功能,然后在相應(yīng)的方法上添加@Scheduled()中間寫上

    2024年02月03日
    瀏覽(23)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包