最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

springSecurity用戶認證和授權(quán)的實現(xiàn)

 更新時間:2024年07月02日 10:20:59   作者:畢竟尹穩(wěn)健  
Spring?Security?是一個開源的安全框架,提供了基于權(quán)限的訪問控制、身份認證的功能,本文主要介紹了springSecurity用戶認證和授權(quán),具有一定參考價值,感興趣的可以了解一下

一,框架介紹


Spring 是一個非常流行和成功的 Java 應(yīng)用開發(fā)框架。Spring Security 基于 Spring 框架,提供了一套 Web 應(yīng)用安全性的完整解決方案。一般來說,Web 應(yīng)用的安全性包括用戶認證(Authentication)和用戶授權(quán)(Authorization)兩個部分。

(1)用戶認證指的是:驗證某個用戶是否為系統(tǒng)中的合法主體,也就是說用戶能否訪問該系統(tǒng)。用戶認證一般要求用戶提供用戶名和密碼。系統(tǒng)通過校驗用戶名和密碼來完成認證過程。

(2)用戶授權(quán)指的是驗證某個用戶是否有權(quán)限執(zhí)行某個操作。在一個系統(tǒng)中,不同用戶所具有的權(quán)限是不同的。比如對一個文件來說,有的用戶只能進行讀取,而有的用戶可以進行修改。一般來說,系統(tǒng)會為不同的用戶分配不同的角色,而每個角色則對應(yīng)一系列的權(quán)限。

Spring Security其實就是用filter,多請求的路徑進行過濾。

(1)如果是基于Session,那么Spring-security會對cookie里的sessionid進行解析,找到服務(wù)器存儲的sesion信息,然后判斷當前用戶是否符合請求的要求。

(2)如果是token,則是解析出token,然后將當前請求加入到Spring-security管理的權(quán)限信息中去

認證與授權(quán)實現(xiàn)思路

二 ,如何實現(xiàn)

1 ,導(dǎo)入依賴

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

2,代碼 

package com.demo.config;

import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfiguration;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UsernameNotFoundException;

@EnableWebSecurity
public class Security extends WebSecurityConfiguration {
    protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests()
                .antMatchers("/public/**").permitAll() // 允許訪問公開路徑
                .antMatchers("/public/index").hasRole("vip") // 需要指定用戶在可以使用
                .antMatchers("/admin/**").hasRole("admin") // 需要指定用戶在可以使用
                .anyRequest().authenticated() // 其他請求需要認證
                .and()
                .formLogin() // 使用表單登錄
                .loginPage("/login") // 指定登錄頁面
                .permitAll() // 允許所有用戶訪問登錄頁面
                .and()
                .logout() // 配置注銷
                .logoutUrl("/logout") // 注銷路徑
                .logoutSuccessUrl("/login?logout") // 注銷成功后跳轉(zhuǎn)的頁面
                .permitAll();

    }
    //緩存中
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.inMemoryAuthentication()
                //添加  名字為 admin  密碼 為 admin123 的用戶 基于權(quán)限 ADMIN
                .withUser("admin").password("admin123").roles("ADMIN")
                .and()
                .withUser("user").password("user123").roles("USER");
    }
    //從數(shù)據(jù)庫中
    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
        // 從數(shù)據(jù)庫或其他數(shù)據(jù)源加載用戶信息
        // 這里簡單起見,直接使用內(nèi)存中的用戶信息
        if ("admin".equals(username)) {
            return org.springframework.security.core.userdetails.User.builder()
                    .username("admin")
                    .password("{noop}admin") // {noop}表示不加密,實際項目中應(yīng)該使用加密的密碼
                    .roles("ADMIN")
                    .build();
        } else if ("user".equals(username)) {
            return org.springframework.security.core.userdetails.User.builder()
                    .username("user")
                    .password("{noop}user")
                    .roles("USER")
                    .build();
        } else {
            throw new UsernameNotFoundException("User not found");
        }
    }
}
import org.springframework.security.access.annotation.Secured;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;

@Controller
public class MyController {

    @GetMapping("/user")
    @Secured("ROLE_USER") // 要求用戶具有ROLE_USER角色才能訪問
    public String userPage() {
        return "user";
    }
}
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;

@Controller
public class MyController {

    @GetMapping("/admin")
    @PreAuthorize("hasRole('ADMIN')") // 要求用戶具有ROLE_ADMIN角色才能訪問
    public String adminPage() {
        return "admin";
    }

    @GetMapping("/user")
    @PreAuthorize("hasRole('USER')") // 要求用戶具有ROLE_USER角色才能訪問
    public String userPage() {
        return "user";
    }
}

到此這篇關(guān)于springSecurity用戶認證和授權(quán)的實現(xiàn)的文章就介紹到這了,更多相關(guān)springSecurity 認證和授權(quán)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家! 

相關(guān)文章

  • MyBatis?Generator使用小結(jié)

    MyBatis?Generator使用小結(jié)

    本文主要介紹了MyBatis?Generator使用小結(jié),它能夠根據(jù)數(shù)據(jù)庫表,自動生成java實體類、dao層接口及mapper.xml文件,具有一定的參考價值,感興趣的可以了解一下
    2023-11-11
  • Java日常練習(xí)題,每天進步一點點(54)

    Java日常練習(xí)題,每天進步一點點(54)

    下面小編就為大家?guī)硪黄狫ava基礎(chǔ)的幾道練習(xí)題(分享)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧,希望可以幫到你
    2021-08-08
  • 如何解決springboot自動重啟問題

    如何解決springboot自動重啟問題

    這篇文章主要介紹了如何解決springboot自動重啟問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • 最新IntelliJ?IDEA?2022配置?Tomcat?8.5?的詳細步驟演示

    最新IntelliJ?IDEA?2022配置?Tomcat?8.5?的詳細步驟演示

    這篇文章主要介紹了IntelliJ?IDEA?2022?詳細配置?Tomcat?8.5?步驟演示,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-08-08
  • JAVA中JVM的重排序詳細介紹

    JAVA中JVM的重排序詳細介紹

    重排序通常是編譯器或運行時環(huán)境為了優(yōu)化程序性能而采取的對指令進行重新排序執(zhí)行的一種手段。重排序分為兩類:編譯期重排序和運行期重排序,分別對應(yīng)編譯時和運行時環(huán)境
    2014-05-05
  • 深入理解Java運行時數(shù)據(jù)區(qū)_動力節(jié)點Java學(xué)院整理

    深入理解Java運行時數(shù)據(jù)區(qū)_動力節(jié)點Java學(xué)院整理

    這篇文章主要介紹了Java運行時數(shù)據(jù)區(qū)的相關(guān)知識,非常不錯,具有參考借鑒價值,需要的朋友參考下吧
    2017-06-06
  • 詳解java 單例模式及方法總結(jié)

    詳解java 單例模式及方法總結(jié)

    這篇文章主要介紹了詳解java 單例模式及方法總結(jié)的相關(guān)資料,需要的朋友可以參考下
    2017-05-05
  • 解決SpringCloud Gateway配置自定義路由404的坑

    解決SpringCloud Gateway配置自定義路由404的坑

    這篇文章主要介紹了解決SpringCloud Gateway配置自定義路由404的坑,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • Java序列化的原理分析及解決

    Java序列化的原理分析及解決

    文章介紹了Java中的序列化機制,包括Serializable和Externalizable接口的區(qū)別,以及serialVersionUID的作用,Serializable接口可以序列化的所有子類型本身都是可序列化的,如果要序列化的類有父類,父類也應(yīng)該實現(xiàn)Serializable接口
    2024-11-11
  • Java中的四種單例模式淺析

    Java中的四種單例模式淺析

    這篇文章主要給大家介紹了關(guān)于Java中四種單例模式的相關(guān)資料,其中包括餓漢式、懶漢式、懶漢式(雙重鎖)及內(nèi)部類等四種,分別給出了詳細的示例代碼和介紹,需要的朋友們下面來一起看看吧。
    2017-05-05

最新評論

中超| 定边县| 阳春市| 大新县| 诸城市| 蓝田县| 临泽县| 井研县| 新乡市| 南昌县| 扎赉特旗| 玛曲县| 融水| 本溪| 定西市| 炉霍县| 盘锦市| 林西县| 孙吴县| 嘉祥县| 扶余县| 枝江市| 重庆市| 比如县| 延边| 信阳市| 麻栗坡县| 阿合奇县| 义马市| 平潭县| 绩溪县| 澎湖县| 嵊泗县| 宝清县| 宜章县| 新泰市| 上思县| 临沭县| 嘉鱼县| 昌吉市| 贵港市|