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

SpringCloud微服務(wù)整合Spring Security進行統(tǒng)一鑒權(quán)

這篇具有很好參考價值的文章主要介紹了SpringCloud微服務(wù)整合Spring Security進行統(tǒng)一鑒權(quán)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

1、思想

  • 網(wǎng)關(guān)gateway
  • 普通資源微服務(wù)member
  • 鑒權(quán)微服務(wù)auth
    為了做到更靈活的方法級別的鑒權(quán)操作,決定將權(quán)限控制下放到具體的普通微服務(wù),其實并不需要多配置很多東西。網(wǎng)關(guān)只負責轉(zhuǎn)發(fā)請求,鑒權(quán)則是由auth認證微服務(wù)來完成的。
  • 網(wǎng)上很多都是在網(wǎng)關(guān)層面進行鑒權(quán),但是這么做不靈活,并不能做到方法級別的鑒權(quán)。比如,普通資源微服務(wù)中的一些方法并不需要權(quán)限,是開放訪問的,而有些方法是需要鑒權(quán)的。網(wǎng)關(guān)層面只能決定某個微服務(wù)是否需要鑒權(quán),要么所有方法全做,要么全不做,是缺少靈活度的。

2、步驟

2.1、前言

  • 有一個大坑,記得如果是單機操作多個微服務(wù)項目,要給每個微服務(wù)添加session cookie name,如下
server:
  port: 8003
  servlet:
    session:
      cookie:
        #防止Cookie沖突,沖突會導致登錄驗證不通過
        name: OAUTH2-CLIENT-SESSIONID03
  • 一定一定要做這一步。

2.2、關(guān)系

  • 網(wǎng)關(guān)gateway
  • 普通資源微服務(wù)member
  • 鑒權(quán)微服務(wù)auth

2.3、認證微服務(wù)auth

  • 不需要變動,參考我之前系列的博客:https://blog.csdn.net/qq_41076797/article/details/129985272

2.3.1、微服務(wù)目錄

springcloud集成security,微服務(wù),spring cloud,springsecurity
其中整合了swagger的兩個配置文件和本項目無關(guān),可忽略。

2.3.2、引入必要依賴

auth端:

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

還有一些必要的組件是放到了common模塊,然后在auth端引入common模塊就好了。比如有nacos,一些實體類等等。要記得引入common后也要做必要的配置,比如nacos,相關(guān)配置可見博客:https://blog.csdn.net/qq_41076797/article/details/128509393、https://blog.csdn.net/qq_41076797/article/details/128508723;這里就不詳細說了。

2.3.3、配置用戶鑒權(quán)實體類LoginUser

  • 用戶已經(jīng)有實體類User了,這里要對它進行封裝,從鑒權(quán)的角度把User包一層。
  • 這里要實現(xiàn)UserDetails接口,實現(xiàn)其中的必要方法,這也屬于固定套路,這樣才能用于權(quán)限鑒定。
  • 在auth微服務(wù)下面開個detail文件夾,創(chuàng)建實體類LoginUser,
package com.lyy.yingwudemo.yingwu_auth.service;

/**
 * @author :lyy
 * @date : 04-06-10:15
 */
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.authority.SimpleGrantedAuthority;
import org.springframework.security.core.userdetails.UserDetails;

import java.util.Collection;

/**
 * 登錄用戶身份權(quán)限
 *
 * @author ruoyi
 */
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class LoginUser implements UserDetails
{
   
    private static final long serialVersionUID = 1L;

    /**
     * 擴展字段
     */
    private Long userId;

    /**
     * 默認字段
     */
    private String username;
    private String password;
    private Boolean enabled;
    private Collection<SimpleGrantedAuthority> authorities;


    @Override
    public Collection<? extends GrantedAuthority> getAuthorities() {
   
        return this.authorities;
    }

    @Override
    public String getPassword() {
   
        return this.password;
    }

    @Override
    public String getUsername() {
   
        return this.username;
    }

    @Override
    public boolean isAccountNonExpired() {
   
        return true;
    }

    @Override
    public boolean isAccountNonLocked() {
   
        return true;
    }

    @Override
    public boolean isCredentialsNonExpired() {
   
        return true;
    }

    @Override
    public boolean isEnabled() {
   
        return this.enabled;
    }
}

2.3.4、創(chuàng)建根據(jù)用戶名獲取封裝的用戶信息的service:UserDetailServiceImpl

  • 這個主要就是定義一個類實現(xiàn)固定的接口UserDetailsService中的固定的方法loadUserByUsername,這個方法就是根據(jù)字符串username返回一個UserDetails,因為得讓springsecurity直到你要進行鑒權(quán)的對象啥樣啊!
  • 這里通過feign從用戶服務(wù)member獲取用戶信息。
package com.lyy.yingwudemo.yingwu_auth.service;

import com.alibaba.fastjson.TypeReference;
import com.lyy.yingwuDemo.yingwu_common.entity.User;
import com.lyy.yingwuDemo.yingwu_common.utils.R;
import com.lyy.yingwudemo.yingwu_auth.feign.MemberFeignService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.authentication.AccountExpiredException;
import org.springframework.security.authentication.DisabledException;
import org.springframework.security.authentication.LockedException;
import org.springframework.security.core.authority.SimpleGrantedAuthority;

import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.core.userdetails.UsernameNotFoundException;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.Collection;

/**
 * @author :lyy
 * @date : 04-06-13:21
 */
@Service
@Slf4j
public class UserDetailServiceImpl implements UserDetailsService {
   

    @Autowired
    private MemberFeignService memberFeignService;

    /**
     *
     * @param username
     * @return 就是負責構(gòu)建一個UserDetails,咱們之前構(gòu)建的實體類LoginUser就實現(xiàn)了UserDetails,所以是符合要求的
     * @throws UsernameNotFoundException
     */
    @Override
    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
   
        // 后面從管理端獲取用戶信息
        R r = memberFeignService.getMemberUsername(username);
        TypeReference<User> typeReference = new TypeReference<User>() {
   };
        User user=r.getData("user",typeReference);
        if(user==null)
            throw new UsernameNotFoundException("用戶不存在");
        LoginUser userDetails = loadUser(user);
        if (!userDetails.isEnabled()) {
   
            throw new DisabledException("該賬戶已被禁用!");
        } else if (!userDetails.isAccountNonLocked()) {
   
            throw new LockedException("該賬號已被鎖定!");
        } else if (!userDetails.isAccountNonExpired()) {
   
            throw new AccountExpiredException("該賬號已過期!");
        }
        return userDetails;
    }

    private LoginUser loadUser(User user) {
   
        Collection<SimpleGrantedAuthority> authorities =new ArrayList<>();
        user.getUserTags().stream().forEach(tag->
            authorities.add(new SimpleGrantedAuthority(tag.equals("1")?"ROLE_ADMIN":"ROLE_USER"))
        );

        LoginUser loginUser = new LoginUser();
        loginUser.setAuthorities(authorities);

        return LoginUser.builder()
                .userId(1L)
                .username(user.getUserName())
                .enabled(user.getEnable())
                .authorities(authorities)
                // 這里的密碼就是正確密碼,要拿前端傳來的和下面的比較
                .password(new BCryptPasswordEncoder().encode(user.getPassWord())).build();
    }
}

2.3.5、如果不想自己設(shè)計用戶service

不管要不要自己手動設(shè)計service,都要通過rpc調(diào)用,查詢到username對應的那個用戶,以及對應的權(quán)限。
參考以下代碼文章來源地址http://www.zghlxwxcb.cn/news/detail-764046.html

@Service
@Slf4j
public class SecurityUserDetailService implements UserDetailsService {
   


    @Autowired
    private UserService userService;

    @Autowired
    private PermissionService permissionService;


    @Override
    public UserDetails loadUserByUsername(String username) {
   

        UserEntity user = userService.getUserByUsername(username);
        if (user == null) {
   
            return null;
        }
        //獲取權(quán)限
        List<PermissionEntry> permissions = permissionService.getPermissionsByUserId(user.getId());
        List<String> codes = permissions.stream().map(PermissionEntry::getCode).collect(Collectors

到了這里,關(guān)于SpringCloud微服務(wù)整合Spring Security進行統(tǒng)一鑒權(quán)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • Springcloud gateway網(wǎng)關(guān)+認證服務(wù)+token方式,入口層認證統(tǒng)一微服務(wù)鑒權(quán)【設(shè)計實踐】

    目錄 背景 實現(xiàn) gateway maven配置 yml配置 頁面登錄攔截配置類 白名單配置 token工具類 登錄配置類 全局過濾器類 項目啟動類 分布式項目的單點登錄分為認證服務(wù)(單點登錄服務(wù)端)和業(yè)務(wù)服務(wù)(單點登錄客戶端)兩個角色, 當訪問業(yè)務(wù)服務(wù)時,認證服務(wù)客戶端SDK校驗一下是否

    2024年02月15日
    瀏覽(21)
  • SpringCloud整合spring security+ oauth2+Redis實現(xiàn)認證授權(quán)

    SpringCloud整合spring security+ oauth2+Redis實現(xiàn)認證授權(quán)

    在微服務(wù)構(gòu)建中,我們一般用一個父工程來通知管理依賴的各種版本號信息。父工程pom文件如下: 在SpringCloud微服務(wù)體系中服務(wù)注冊中心是一個必要的存在,通過注冊中心提供服務(wù)的注冊和發(fā)現(xiàn)。具體細節(jié)可以查看我之前的博客,這里不再贅述。我們開始構(gòu)建一個eureka注冊中

    2024年02月06日
    瀏覽(25)
  • Spring Security 6.x 系列【45】微服務(wù)篇之搭建統(tǒng)一認證服務(wù)

    有道無術(shù),術(shù)尚可求,有術(shù)無道,止于術(shù)。 本系列Spring Boot 版本 3.0.4 本系列Spring Security 版本 6.0.2 源碼地址:https://gitee.com/pearl-organization/study-spring-security-demo

    2024年02月09日
    瀏覽(17)
  • 【高?!縎pring Security鑒權(quán)規(guī)則錯誤配置風險

    【高危】Spring Security鑒權(quán)規(guī)則錯誤配置風險

    Spring Security 是一套為基于Spring的應用程序提供說明性安全保護的安全框架。 在 Spring Security 受影響的版本中,由于 Spring Security 的授權(quán)規(guī)則會應用于整個應用程序上下文,當應用程序中包含多個servlet,并且其中一個為DispatcherServlet時 ,使用 requestMatchers(String) 方法錯誤地將非

    2024年02月15日
    瀏覽(34)
  • 【springcloud 微服務(wù)】Spring Cloud Alibaba整合Sentinel詳解

    目錄 一、前言 二、環(huán)境準備 2.1 部署sentinel管控臺 2.1.1 官網(wǎng)下載sentinel的jar包 2.1.2 啟動控制臺

    2023年04月09日
    瀏覽(96)
  • 【Spring Security】分布式鑒權(quán)的使用

    【Spring Security】分布式鑒權(quán)的使用

    ????歡迎來到我的CSDN主頁!???? ??我是Java方文山,一個在CSDN分享筆記的博主。???? ??推薦給大家我的專欄《Spring Security》。???? ??點擊這里,就可以查看我的主頁啦!???? Java方文山的個人主頁 ??如果感覺還不錯的話請給我點贊吧!???? ??期待你的加入,一

    2024年02月02日
    瀏覽(15)
  • Java之SpringCloud Alibaba【五】【微服務(wù) Sentinel整合openfeign進行降級】

    Java之SpringCloud Alibaba【五】【微服務(wù) Sentinel整合openfeign進行降級】

    Java之SpringCloud Alibaba【一】【Nacos一篇文章精通系列】 跳轉(zhuǎn) Java之SpringCloud Alibaba【二】【微服務(wù)調(diào)用組件Feign】 跳轉(zhuǎn) Java之SpringCloud Alibaba【三】【微服務(wù)Nacos-config配置中心】 跳轉(zhuǎn) Java之SpringCloud Alibaba【四】【微服務(wù) Sentinel服務(wù)熔斷】 跳轉(zhuǎn) Java之SpringCloud Alibaba【五】【微服務(wù)

    2024年02月11日
    瀏覽(39)
  • 【springcloud微服務(wù)】Spring Cloud Alibaba 整合dubbo與openfeign

    dubbo與springcloud都可以單獨作為微服務(wù)治理框架在生產(chǎn)中進行使用,但使用過springcloud的同學大概了解到,springcloud生態(tài)的相關(guān)組件這些年已經(jīng)逐步停更,這就導致在服務(wù)架構(gòu)演進過程中的迭代斷層,以至于一些新的技術(shù)組件引入困難重重,于是在國內(nèi)的市場上就有了升級版的

    2024年02月07日
    瀏覽(91)
  • Spring Gateway + Oauth2 + Jwt網(wǎng)關(guān)統(tǒng)一鑒權(quán)

    Spring Gateway + Oauth2 + Jwt網(wǎng)關(guān)統(tǒng)一鑒權(quán)

    之前文章里說過,分布式系統(tǒng)的鑒權(quán)有兩種方式,一是在網(wǎng)關(guān)進行統(tǒng)一的鑒權(quán)操作,二是在各個微服務(wù)里單獨鑒權(quán)。 第二種方式比較常見,代碼網(wǎng)上也是很多。今天主要是說第一種方式。 重要前提:需要收集各個接口的uri路徑和所需權(quán)限列表的對應關(guān)系,并存入緩存。 服務(wù)

    2024年02月03日
    瀏覽(23)
  • Spring Cloud Gateway + Oauth2 實現(xiàn)統(tǒng)一認證和鑒權(quán)!

    Spring Cloud Gateway + Oauth2 實現(xiàn)統(tǒng)一認證和鑒權(quán)!

    micro-oauth2-gateway:網(wǎng)關(guān)服務(wù),負責請求轉(zhuǎn)發(fā)和鑒權(quán)功能,整合Spring Security+Oauth2; micro-oauth2-auth:Oauth2認證服務(wù),負責對登錄用戶進行認證,整合Spring Security+Oauth2; micro-oauth2-api:受保護的API服務(wù),用戶鑒權(quán)通過后可以訪問該服務(wù),不整合Spring Security+Oauth2。 我們首先來搭建認

    2024年01月16日
    瀏覽(23)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包