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

springboot?集成identityserver4身份驗(yàn)證的過程解析

 更新時(shí)間:2024年01月20日 11:15:55   作者:大熊程序猿  
這篇文章主要介紹了springboot?集成identityserver4身份驗(yàn)證的相關(guān)知識(shí),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧

一、新建項(xiàng)目:com.saas.swaggerdemo

詳情見:spring-boot2.7.8添加swagger

在之前項(xiàng)目基礎(chǔ)上添加如下依賴

       <dependency>
            <groupId>com.nimbusds</groupId>
            <artifactId>nimbus-jose-jwt</artifactId>
            <version>7.9</version>
        </dependency>
        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpcore</artifactId>
            <version>4.4.10</version>
        </dependency>
        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpclient</artifactId>
            <version>4.5.6</version>
        </dependency>
        <dependency>
            <groupId>commons-codec</groupId>
            <artifactId>commons-codec</artifactId>
            <version>1.11</version>
        </dependency>
        <dependency>
            <groupId>org.json</groupId>
            <artifactId>json</artifactId>
            <version>20180813</version>
        </dependency>

 二、添加過濾器JwkFilter

package com.saas.swaggerdemo;
import com.nimbusds.jose.proc.BadJOSEException;
import com.nimbusds.jose.proc.SecurityContext;
import org.json.JSONObject;
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.net.URL;
import java.text.ParseException;
import com.nimbusds.jose.*;
import com.nimbusds.jose.jwk.source.*;
import com.nimbusds.jwt.*;
import com.nimbusds.jose.proc.JWSKeySelector;
import com.nimbusds.jose.proc.JWSVerificationKeySelector;
import com.nimbusds.jwt.proc.*;
@WebFilter(urlPatterns = "/*", filterName="jwkTokenFilter")
public class JwkFilter implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        System.out.println("jwk公鑰解析驗(yàn)證授權(quán)...");
    }
    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException
    {
        boolean authenticated = false;
        HttpServletRequest req = (HttpServletRequest) servletRequest;
        HttpServletResponse rep = (HttpServletResponse) servletResponse;
        boolean authorizationHeaderExist = req.getHeader("Authorization") != null;
        if (!authorizationHeaderExist) {
            rep.setStatus(HttpServletResponse.SC_BAD_REQUEST);
            return;
        }
        String jwkEndpoint = "http://192.168.31.132:7000/.well-known/openid-configuration/jwks";
        String token = cutToken(req.getHeader("Authorization"));
        ConfigurableJWTProcessor jwtProcessor = new DefaultJWTProcessor();
        JWKSource keySource = new RemoteJWKSet(new URL(jwkEndpoint));
        JWSAlgorithm expectedJWSAlg = JWSAlgorithm.RS256;
        JWSKeySelector keySelector = new JWSVerificationKeySelector(expectedJWSAlg, keySource);
        if(keySelector==null)
        {
            rep.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
            System.out.println("無法獲取公鑰");
            return;
        }
        jwtProcessor.setJWSKeySelector(keySelector);
        SecurityContext ctx = null;
        JWTClaimsSet claimsSet = null;
        try {
            claimsSet = jwtProcessor.process(token, ctx);
            authenticated = true;
        } catch (ParseException e) {
            rep.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
            e.printStackTrace();
            return;
        } catch (BadJOSEException e) {
            rep.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
            e.printStackTrace();
            return;
        } catch (JOSEException e) {
            rep.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
            e.printStackTrace();
            return;
        }
        System.out.println(claimsSet.toJSONObject());
        if(claimsSet==null) {
            rep.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
            return;
        }
        JSONObject jo = new JSONObject(claimsSet.toJSONObject());
        String userid = jo.getString("userid");
        if (authenticated)
        {
            filterChain.doFilter(servletRequest, servletResponse);
        } else {
            rep.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
            return;
        }
    }
    //幫助類
    public String cutToken(String originToken)
    {
        String[] temp = originToken.split(" ");
        return temp[1];
    }
    @Override
    public void destroy() {
    }
}

添加 @ServletComponentScan

 三、準(zhǔn)備Identityserver4Server

三、測(cè)試

Postman帶上Token調(diào)用接口

  獲取到用戶ID

使用過期或無效的token

到此這篇關(guān)于springboot 集成identityserver4身份驗(yàn)證的文章就介紹到這了,更多相關(guān)springboot 集成identityserver身份驗(yàn)證內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • IDEA 2019.2.2配置Maven3.6.2打開Maven項(xiàng)目出現(xiàn) Unable to import Maven project的問題

    IDEA 2019.2.2配置Maven3.6.2打開Maven項(xiàng)目出現(xiàn) Unable to import Maven

    這篇文章主要介紹了IDEA 2019.2.2配置Maven3.6.2打開Maven項(xiàng)目出現(xiàn) Unable to import Maven project的問題,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-12-12
  • Mybatis官方生成器的使用方式

    Mybatis官方生成器的使用方式

    本文詳細(xì)介紹了MyBatisGenerator(MBG)的使用方法,通過實(shí)際代碼示例展示了如何配置Maven插件來自動(dòng)化生成MyBatis項(xiàng)目所需的實(shí)體類、Mapper接口和MapperXML文件,MBG通過配置文件和Maven插件,可以大大減少開發(fā)人員在進(jìn)行CRUD操作時(shí)的重復(fù)工作,提升開發(fā)效率和代碼一致性
    2025-01-01
  • Java spring單點(diǎn)登錄系統(tǒng)

    Java spring單點(diǎn)登錄系統(tǒng)

    這篇文章主要介紹了Java spring單點(diǎn)登錄系統(tǒng),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-09-09
  • Windows 下安裝配置 Eclipse詳細(xì)教程

    Windows 下安裝配置 Eclipse詳細(xì)教程

    Eclipse是一款非常優(yōu)秀的開源IDE,非常適合Java開發(fā),由于支持插件技術(shù),受到了越來越多的開發(fā)者的歡迎。配合眾多令人眼花繚亂的插件,完全可以滿足從企業(yè)級(jí)Java應(yīng)用到手機(jī)終端Java游戲的開發(fā)。本文將帶您手把手步入Eclipse的廣闊天地
    2016-09-09
  • java方法重寫實(shí)例分析

    java方法重寫實(shí)例分析

    這篇文章主要介紹了java方法重寫,較為詳細(xì)的講述了Java方法重寫的注意事項(xiàng),并附帶實(shí)例加以說明,需要的朋友可以參考下
    2014-09-09
  • springmvc Controller方法沒有加@ResponseBody導(dǎo)致api訪問404問題

    springmvc Controller方法沒有加@ResponseBody導(dǎo)致api訪問404問題

    這篇文章主要介紹了springmvc Controller方法沒有加@ResponseBody導(dǎo)致api訪問404問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • SpringBoot整合mybatisPlus實(shí)現(xiàn)批量插入并獲取ID詳解

    SpringBoot整合mybatisPlus實(shí)現(xiàn)批量插入并獲取ID詳解

    這篇文章主要為大家詳細(xì)介紹了SpringBoot如何整合mybatisPlus實(shí)現(xiàn)批量插入并獲取ID,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2025-04-04
  • springboot啟動(dòng)時(shí)候報(bào)錯(cuò)mongodb問題

    springboot啟動(dòng)時(shí)候報(bào)錯(cuò)mongodb問題

    這篇文章主要介紹了springboot啟動(dòng)時(shí)候報(bào)錯(cuò)mongodb問題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • SpringBoot下token短信驗(yàn)證登入登出權(quán)限操作(token存放redis,ali短信接口)

    SpringBoot下token短信驗(yàn)證登入登出權(quán)限操作(token存放redis,ali短信接口)

    這篇文章主要介紹了SpringBoot下token短信驗(yàn)證登入登出權(quán)限操作(token存放redis,ali短信接口),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-11-11
  • Spring Boot2+JPA之悲觀鎖和樂觀鎖實(shí)戰(zhàn)教程

    Spring Boot2+JPA之悲觀鎖和樂觀鎖實(shí)戰(zhàn)教程

    這篇文章主要介紹了Spring Boot2+JPA之悲觀鎖和樂觀鎖實(shí)戰(zhàn)教程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-10-10

最新評(píng)論

儋州市| 湾仔区| 河源市| 余庆县| 沅江市| 安徽省| 黑龙江省| 定结县| 郑州市| 阜南县| 宁津县| 桦川县| 松江区| 大悟县| 望奎县| 韶关市| 信宜市| 增城市| 荆门市| 阜康市| 镇江市| 汕尾市| 常山县| 望城县| 沂源县| 西华县| 洛宁县| 互助| 滦南县| 确山县| 潞城市| 青浦区| 黎川县| 留坝县| 郓城县| 绥化市| 定陶县| 沙洋县| 广灵县| 泗水县| 桃江县|