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

SpringSecurity +oauth2獲取當(dāng)前登錄用戶(二)

這篇具有很好參考價值的文章主要介紹了SpringSecurity +oauth2獲取當(dāng)前登錄用戶(二)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

特別注意:以下內(nèi)容如果訪問失敗或有其他疑問,可先學(xué)習(xí):

SpringSecurity +oauth2+JWT實現(xiàn)統(tǒng)一授權(quán)和認證及項目搭建(一)

1 獲取當(dāng)前用戶的信息代碼為:

Object principal = SecurityContextHolder.getContext().getAuthentication().getPrincipal();

但是,通過運行會發(fā)現(xiàn)principal的值只是用戶名,沒有用戶信息,通過去看源碼,才發(fā)現(xiàn)問題所在,以下是源碼:

源碼類:DefaultUserAuthenticationConverter.java

SpringSecurity +oauth2獲取當(dāng)前登錄用戶(二)

通過源碼分析,發(fā)現(xiàn)這里的map只存儲用戶名,對此,如果要獲取用戶,我這里提供的方案是重寫該方法,步驟如下:

新建UserAuthenticationConverter.java配置類,繼承DefaultUserAuthenticationConverter.java,代碼如下:

package com.yty.system.oauth.config.jwt;

import com.yty.system.oauth.entity.SysUser;
import com.yty.system.oauth.entity.vo.SecurityUser;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.authority.AuthorityUtils;
import org.springframework.security.oauth2.provider.token.DefaultUserAuthenticationConverter;
import org.springframework.util.StringUtils;

import java.util.Collection;
import java.util.HashMap;
import java.util.Map;

@Configuration
public class UserAuthenticationConverter extends DefaultUserAuthenticationConverter {

    private Collection<? extends GrantedAuthority> defaultAuthorities;

    public void setDefaultAuthorities(String[] defaultAuthorities) {
        this.defaultAuthorities = AuthorityUtils.commaSeparatedStringToAuthorityList(StringUtils.arrayToCommaDelimitedString(defaultAuthorities));
    }

    private static final String USER_INFO = "userInfo";

    /**
     * 設(shè)置存入認證信息中的Map
     *
     * @param authentication
     * @return
     */
    @Override
    public Map<String, ?> convertUserAuthentication(Authentication authentication) {
        // 入?yún)uthentication中保存了完整的用戶信息(都已經(jīng)有完整信息了還查個P)。
        Map<String, Object> map = new HashMap<>(1);
        // 獲取用戶信息并保存。
        Object o = authentication.getPrincipal();
        SecurityUser userInfo = (SecurityUser) o;
        SysUser sysUser = userInfo.getSysUser();
        map.put(USER_INFO, sysUser);
        // 保存了賬戶的權(quán)限信息,可以通過Authentication..getAuthorities()方法獲取。
        if (authentication.getAuthorities() != null && !authentication.getAuthorities().isEmpty()) {
            map.put(AUTHORITIES, AuthorityUtils.authorityListToSet(authentication.getAuthorities()));
        }
        return map;
    }

    /**
     * 選擇存入認證信息中的數(shù)據(jù)
     *
     * @param map
     * @return
     */
    @Override
    public Authentication extractAuthentication(Map<String, ?> map) {
        Authentication authentication = null;
        if (map.containsKey(USER_INFO)) {
            // 將用戶對象作為用戶信息。
            Object principal = map.get(USER_INFO);
            Collection<? extends GrantedAuthority> authorities = this.getAuthorities(map);
            authentication = new UsernamePasswordAuthenticationToken(principal, "N/A", authorities);
        }
        return authentication;
    }

    private Collection<? extends GrantedAuthority> getAuthorities(Map<String, ?> map) {
        if (!map.containsKey(AUTHORITIES)) {
            return this.defaultAuthorities;
        } else {
            Object authorities = map.get(AUTHORITIES);
            if (authorities instanceof String) {
                return AuthorityUtils.commaSeparatedStringToAuthorityList((String)authorities);
            } else if (authorities instanceof Collection) {
                return AuthorityUtils.commaSeparatedStringToAuthorityList(StringUtils.collectionToCommaDelimitedString((Collection)authorities));
            } else {
                throw new IllegalArgumentException("Authorities must be either a String or a Collection");
            }
        }
    }
}

修改JwtTokenStoreConfig.java類,將以上配置類引用到方法jwtAccessTokenConverter中,具體實現(xiàn)如下:

@Bean
    public JwtAccessTokenConverter jwtAccessTokenConverter() {
        JwtAccessTokenConverter accessTokenConverter = new JwtAccessTokenConverter();

        DefaultAccessTokenConverter defaultAccessTokenConverter = new DefaultAccessTokenConverter();
        defaultAccessTokenConverter.setUserTokenConverter(new UserAuthenticationConverter());
        // 賦予新的Token轉(zhuǎn)換器。
        accessTokenConverter.setAccessTokenConverter(defaultAccessTokenConverter);
        //配置JWT使用的秘鑰
        accessTokenConverter.setSigningKey(secret);

        return accessTokenConverter;
    }

UserDetailService編寫靜態(tài)方法getCurrentUser獲取用戶信息,代碼如下:

/**
     * 獲取當(dāng)前用戶信息
     */
    public static SysUser getCurrentUser() {
        Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
        if (Objects.isNull(authentication)) {
           throw new RuntimeException("請登錄");
        }
        Object principal = authentication.getPrincipal();
        if (Objects.isNull(principal)) {
            throw new RuntimeException("請登錄");
        }
        ObjectMapper objectMapper = new ObjectMapper();
        SysUser sysUser = objectMapper.convertValue(principal, SysUser.class);
        return sysUser;
    }

UserController.java類中編寫測試入口方法getCurrentUser,代碼如下:


@RestController
@RequestMapping("/user")
public class UserController {


    @GetMapping("/getCurrentUser")
    public Object getCurrentUser() {
        SysUser currentUser = UserDetailService.getCurrentUser();
        return currentUser;
    }
}

postman訪問:

1 先獲取token

SpringSecurity +oauth2獲取當(dāng)前登錄用戶(二)

2 調(diào)用接口http://localhost:8500/oauth_api/user/getCurrentUser,注意參數(shù),需要在請求頭中添加參數(shù)Authorization,內(nèi)容為:oken_type+空格+access_token,如圖所示:

SpringSecurity +oauth2獲取當(dāng)前登錄用戶(二)

注意,如果訪問不通過,需要在資源配置類中將用戶訪問接口添加到資源配置ResourceServiceConfig.java中,如無該類,自己新建一個,代碼如下所示:文章來源地址http://www.zghlxwxcb.cn/news/detail-411501.html

package com.yty.system.oauth.config.jwt;

import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.oauth2.config.annotation.web.configuration.EnableResourceServer;
import org.springframework.security.oauth2.config.annotation.web.configuration.ResourceServerConfigurerAdapter;

@Configuration
@EnableResourceServer
public class ResourceServiceConfig extends ResourceServerConfigurerAdapter {

    @Override
    public void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests()
                .anyRequest().authenticated()
                // 受保護的資源
                .and().requestMatchers()
                .antMatchers("/user/**");

    }
}

到了這里,關(guān)于SpringSecurity +oauth2獲取當(dāng)前登錄用戶(二)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • 【Oauth2.0 單點登錄 + 第三方授權(quán)認證】用戶認證、授權(quán)模式

    【Oauth2.0 單點登錄 + 第三方授權(quán)認證】用戶認證、授權(quán)模式

    本文主要對 SpringSecurity Oauth 2.0 用戶認證,授權(quán)碼授權(quán)模式、密碼授權(quán)模式,以及授權(quán)流程進行講解 開發(fā)中,有些功能只有管理員才有,普通用戶是沒有的。即需要對用戶的身份進行認證,是管理員還是普通用戶。認證方式有兩種: 身份認證: 用戶在訪問相應(yīng)資源時對用戶

    2023年04月08日
    瀏覽(25)
  • SpringSecurity+OAuth2.0

    SpringSecurity+OAuth2.0

    OAuth(Open Authorization)是一個關(guān)于授權(quán)(authorization)的開放網(wǎng)絡(luò)標(biāo)準(zhǔn),允許用戶授權(quán)第三方應(yīng)用訪問他們存儲在另外的服務(wù)提供者上的信息,而不需要將用戶名和密碼提供給第三方移動應(yīng)用或分享他們數(shù)據(jù)的所有內(nèi)容。OAuth 在全世界得到廣泛應(yīng)用,目前的版本是 2.0 版。 簡單

    2024年02月13日
    瀏覽(22)
  • Java Spring Security OAuth2.0 通過token 獲取用戶信息(ID)

    通過獲取Spring 身份認證(Authentication)來獲取用戶信息,這種方式必須 ①請求頭中攜帶Authorization token 或 ②請求參數(shù)中攜帶access_token =token 參數(shù) 才能有效獲取用戶信息 1)那我如果不使用常規(guī)傳遞模式,而使用自定義token參數(shù)名、或者其他渠道獲取的token; 2)需要使用JwtHelper 進行

    2024年02月15日
    瀏覽(26)
  • SpringSecurity+Oauth2+JWT

    快速入門 1. 創(chuàng)建基礎(chǔ)項目 file == new == project == Spring Initializr ==next == web(Spring Web)、Security(Spring Security) ==一直下一步 2. 編寫代碼進行測試 創(chuàng)建controller static下創(chuàng)建login.html、main.html 3. 啟動項目進行測試 訪問http://localhost:8080/login.html 會進入SpringSecurity框架自帶的登入頁面 用戶默認

    2024年02月12日
    瀏覽(24)
  • SpringSecurity之Oauth2介紹

    SpringSecurity之Oauth2介紹

    第三方認證技術(shù)方案最主要是解決 認證協(xié)議的通用標(biāo)準(zhǔn)問題 ,因為要實現(xiàn)跨系統(tǒng)認證,各系統(tǒng)之間要遵循一定的接口協(xié)議。 OAUTH協(xié)議為用戶資源的授權(quán)提供了一個安全的、開放而又簡易的標(biāo)準(zhǔn)。同時,任何第三方都可以使用OAUTH認證服務(wù),任何服務(wù)提供商都可以實現(xiàn)自身的

    2023年04月09日
    瀏覽(25)
  • SpringSecurity+ Oauth2.0+JWT 0-1

    SpringSecurity+ Oauth2.0+JWT 0-1

    AuthorizationServer 需要繼承AuthorizationServerConfigurerAdapter AuthorizationServerConfigurerAdapter源碼 AuthorizationServerSecurityConfigurer:配置令牌端點(Token Endpoint)的安全約束 ClientDetailsServiceConfigurer:配置OAuth2客戶端 AuthorizationServerEndpointsConfigurer:配置授權(quán)(authorization)以及令牌(token)的訪

    2024年02月07日
    瀏覽(21)
  • SpringSecurity OAuth2 配置 token有效時長

    SpringSecurity OAuth2 配置 token有效時長

    1.這種方式配置之后,并沒有生效 2.第二種方法時改數(shù)據(jù)庫的配置,測試配置有效

    2024年02月09日
    瀏覽(17)
  • 五、SpringSecurity OAuth2擴展手機驗證碼授權(quán)模式

    五、SpringSecurity OAuth2擴展手機驗證碼授權(quán)模式

    代碼倉庫:地址 代碼分支:lesson5 在上一篇文章中,我們使用SpringSecurity OAuth2搭建了一套授權(quán)服務(wù),對業(yè)務(wù)系統(tǒng)進行統(tǒng)一授權(quán)管理。OAuth提供了四種授權(quán)方式: 授權(quán)碼模式(authorization_code) 簡化模式(implicit) 客戶端(client_credentials) 密碼(password) 在實際業(yè)務(wù)中上述四種模式不

    2024年02月11日
    瀏覽(43)
  • springboot整合springsecurity+oauth2.0密碼授權(quán)模式

    springboot整合springsecurity+oauth2.0密碼授權(quán)模式

    本文采用的springboot去整合springsecurity,采用oauth2.0授權(quán)認證,使用jwt對token增強。本文僅為學(xué)習(xí)記錄,如有不足多謝提出。 OAuth 2.0是用于授權(quán)的行業(yè)標(biāo)準(zhǔn)協(xié)議。OAuth 2.0為簡化客戶端開發(fā)提供了特定的授權(quán)流,包括Web應(yīng)用、桌面應(yīng)用、移動端應(yīng)用等。 Resource owner(資源擁有者)

    2024年02月04日
    瀏覽(21)
  • 權(quán)限管理 springboot集成springSecurity Oauth2 JWT

    權(quán)限管理 springboot集成springSecurity Oauth2 JWT

    目錄 一、SpringSeurity的基礎(chǔ)操作 1、引入主要依賴 2、加密器 3、實現(xiàn)自定義登錄邏輯 4、訪問限制 5、自定義異常處理? 6、通過注解的方式配置訪問控制 二、Auth2認證方案 1、什么是Auth2認證 2、Oauth2最常用的授權(quán)模式? 3、依賴引入 4、添加配置類 5、測試 6、存在到Redis里,后續(xù)

    2023年04月14日
    瀏覽(26)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包