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

SpringSecurity授權(quán)實(shí)現(xiàn)基本思路

 更新時(shí)間:2024年10月16日 10:10:36   作者:每天進(jìn)步一......  
本文介紹了SpringSecurity中使用FilterSecurityInterceptor進(jìn)行權(quán)限校驗(yàn)的基本方法,通過SecurityContextHolder獲取Authentication中的權(quán)限信息,感興趣的朋友跟隨小編一起看看吧

一、授權(quán)基本思路

在SpringSecurity中,會(huì)使用默認(rèn)的FilterSecurityInterceptor來進(jìn)行權(quán)限校驗(yàn)。在 FilterSecurityInterceptor中會(huì)從SecurityContextHolder獲取其中的Authentication,然后獲取其中的 權(quán)限信息。當(dāng)前用戶是否擁有訪問當(dāng)前資源所需的權(quán)限。

所以我們在項(xiàng)目中只需要把當(dāng)前登錄用戶的權(quán)限信息也存入Authentication。然后設(shè)置我們的資源所需 要的權(quán)限即可

二、實(shí)現(xiàn)過程

(1)開啟相關(guān)配置

@EnableGlobalMethodSecurity(prePostEnabled = true)
public class SecurityConfig{
    .....
}

然后就可以使用對應(yīng)的注解。@PreAuthorize在各接口

@RestController
public class HelloController {
     @RequestMapping("/hello")
     @PreAuthorize("hasAuthority('test')")
     public String hello(){
         return "hello";
     }
 }

(2)自定義LoginUser,封裝權(quán)限信息

我們之前定義了UserDetails的實(shí)現(xiàn)類LoginUser,想要讓其能封裝權(quán)限信息就要對其進(jìn)行修改。

@Data
@NoArgsConstructor
public class LoginUser implements UserDetails{
    private User user;
    //查詢到的權(quán)限列表
    private List<String> list;
    public LoginUser(User user, List<String> list) {
        this.list = list;
        this.user = user;
    }
    //自定義一個(gè)權(quán)限列表的集合  中轉(zhuǎn)操作
    @JSONField(serialize = false)
    List<SimpleGrantedAuthority> authorities;
    //返回權(quán)限
    @Override
    public Collection<? extends GrantedAuthority> getAuthorities() {
        if (authorities != null) {
            return authorities;
        }
        authorities = new ArrayList<>();
        for (String item : list) {
            SimpleGrantedAuthority authority = new SimpleGrantedAuthority(item);
            authorities.add(authority);
        }
        return authorities;
    }
    //獲取密碼
    @Override
    public String getPassword() {
        return user.getPassword();
    }
    //獲取用戶名
    @Override
    public String getUsername() {
        return user.getUserName();
    }
    //判斷賬號(hào)是否未過期
    @Override
    public boolean isAccountNonExpired() {
        return true;
    }
    //判斷賬號(hào)是否沒有鎖定
    @Override
    public boolean isAccountNonLocked() {
        return true;
    }
    //判斷賬號(hào)是否沒有超時(shí)
    @Override
    public boolean isCredentialsNonExpired() {
        return true;
    }
    //判斷賬號(hào)是否可用
    @Override
    public boolean isEnabled() {
        return true;
    }
}

(3)從數(shù)據(jù)庫查詢權(quán)限信息

RBAC模型

我們可以在UserDetailsServiceImpl中去調(diào)用該mapper的方法查詢權(quán)限信息封裝到LoginUser對象 中即可。

@Service
public class UserDetailServiceImpl implements UserDetailsService {
    @Autowired
    private UserMapper userMapper;
    @Autowired
    private MenuMapper menuMapper;
    @Override
    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
        //1.查詢用戶信息
        QueryWrapper<User> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("user_name", username);
        User user = userMapper.selectOne(queryWrapper);
        //如果沒有查詢到用戶,就拋出異常
        if (Objects.isNull(user)) {
            throw new RuntimeException("用戶名或密碼錯(cuò)誤");
        }
        //2.查詢用戶對應(yīng)的權(quán)限信息
//        List<String> list = new ArrayList<>();
//        list.add("select");
//        list.add("delete");
        List<String> list =  menuMapper.selectPermsByUserId(user.getId());
        //3.返回UserDetails對象
        return new LoginUser(user, list);
    }
}

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

相關(guān)文章

  • Mybatis plus結(jié)合springboot使用

    Mybatis plus結(jié)合springboot使用

    本文主要介紹了MyBatisPlus使用SpringBoot數(shù)據(jù)庫操作,從添加依賴到測試,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-11-11
  • Java ArrayList的不同排序方法

    Java ArrayList的不同排序方法

    這篇文章主要介紹了Java ArrayList的不同排序方法,感興趣的小伙伴們可以參考一下
    2015-12-12
  • SpringBoot+MyBatisPlus中樂觀鎖的實(shí)現(xiàn)示例

    SpringBoot+MyBatisPlus中樂觀鎖的實(shí)現(xiàn)示例

    樂觀鎖是一種用于解決并發(fā)沖突的機(jī)制,在數(shù)據(jù)庫中用于保護(hù)數(shù)據(jù)的一致性,本文主要介紹了SpringBoot+MyBatisPlus中樂觀鎖的實(shí)現(xiàn)示例,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-08-08
  • java頁面中文亂碼的解決辦法

    java頁面中文亂碼的解決辦法

    做java開發(fā)的朋友碰到最多的就是中文亂碼這個(gè)問題了,下面介紹頁面提交時(shí)與url中文亂碼的一些解決辦法
    2013-11-11
  • Java高級(jí)特性(基礎(chǔ))

    Java高級(jí)特性(基礎(chǔ))

    這篇文章主要介紹了Java高級(jí)特性(基礎(chǔ)),需要的朋友可以參考下
    2017-04-04
  • Java語言實(shí)現(xiàn)簡單FTP軟件 FTP軟件遠(yuǎn)程窗口實(shí)現(xiàn)(6)

    Java語言實(shí)現(xiàn)簡單FTP軟件 FTP軟件遠(yuǎn)程窗口實(shí)現(xiàn)(6)

    這篇文章主要為大家詳細(xì)介紹了Java語言實(shí)現(xiàn)簡單FTP軟件,F(xiàn)TP軟件遠(yuǎn)程窗口的實(shí)現(xiàn)方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-03-03
  • 基于Java的電梯系統(tǒng)實(shí)現(xiàn)過程

    基于Java的電梯系統(tǒng)實(shí)現(xiàn)過程

    這篇文章主要介紹了基于Java的電梯系統(tǒng)實(shí)現(xiàn)過程,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-10-10
  • Spring Boot中如何使用Swagger詳解

    Spring Boot中如何使用Swagger詳解

    Swagger是一個(gè)規(guī)范和完整的框架,用于生成、描述、調(diào)用和可視化 RESTful風(fēng)格的Web服務(wù),這篇文章主要給大家介紹了關(guān)于Spring Boot中如何使用Swagger的相關(guān)資料,需要的朋友可以參考下
    2021-08-08
  • Java中new與clone操作對象的比較方法舉例

    Java中new與clone操作對象的比較方法舉例

    這篇文章主要給大家介紹了關(guān)于Java中new與clone操作對象的比較方法,在java中對象的誕生是我們開發(fā)人員new出來的,對象的使用也是我們開發(fā)人員進(jìn)行操作的,需要的朋友可以參考下
    2024-07-07
  • java內(nèi)存泄漏與內(nèi)存溢出關(guān)系解析

    java內(nèi)存泄漏與內(nèi)存溢出關(guān)系解析

    這篇文章主要介紹了java內(nèi)存泄漏與內(nèi)存溢出關(guān)系解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-12-12

最新評論

巫山县| 蕉岭县| 高邮市| 启东市| 贞丰县| 金堂县| 大新县| 都匀市| 云安县| 喀什市| 石狮市| 霍州市| 灌南县| 洛隆县| 宝鸡市| 忻州市| 贵南县| 资中县| 桐梓县| 阳东县| 浦江县| 沐川县| 黄浦区| 兴和县| 射洪县| 章丘市| 托克逊县| 张掖市| 格尔木市| 库尔勒市| 右玉县| 昌平区| 镶黄旗| 兴海县| 留坝县| 浪卡子县| 彰化县| 明光市| 增城市| 深水埗区| 漯河市|