spingboot 集成identityserver4身份验证

2024-01-17 05:20

本文主要是介绍spingboot 集成identityserver4身份验证,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、新建项目:com.saas.swaggerdemo

详情见:spring-boot2.7.8添加swagger-CSDN博客

在之前项目基础上添加如下依赖

       <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 {@Overridepublic void init(FilterConfig filterConfig) throws ServletException {System.out.println("jwk公钥解析验证授权...");}@Overridepublic 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];}@Overridepublic void destroy() {}
}

添加 @ServletComponentScan

 三、准备Identityserver4Server

三、测试

Postman带上Token调用接口

  获取到用户ID

使用过期或无效的token

这篇关于spingboot 集成identityserver4身份验证的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/614986

相关文章

【区块链 + 人才服务】区块链集成开发平台 | FISCO BCOS应用案例

随着区块链技术的快速发展,越来越多的企业开始将其应用于实际业务中。然而,区块链技术的专业性使得其集成开发成为一项挑战。针对此,广东中创智慧科技有限公司基于国产开源联盟链 FISCO BCOS 推出了区块链集成开发平台。该平台基于区块链技术,提供一套全面的区块链开发工具和开发环境,支持开发者快速开发和部署区块链应用。此外,该平台还可以提供一套全面的区块链开发教程和文档,帮助开发者快速上手区块链开发。

【Shiro】Shiro 的学习教程(三)之 SpringBoot 集成 Shiro

目录 1、环境准备2、引入 Shiro3、实现认证、退出3.1、使用死数据实现3.2、引入数据库,添加注册功能后端代码前端代码 3.3、MD5、Salt 的认证流程 4.、实现授权4.1、基于角色授权4.2、基于资源授权 5、引入缓存5.1、EhCache 实现缓存5.2、集成 Redis 实现 Shiro 缓存 1、环境准备 新建一个 SpringBoot 工程,引入依赖:

系统架构师-ERP+集成

ERP   集成平台end:就懒得画新的页

Spring Boot集成Tess4J实现OCR

1.什么是Tess4j? Tesseract是一个开源的光学字符识别(OCR)引擎,它可以将图像中的文字转换为计算机可读的文本。支持多种语言和书面语言,并且可以在命令行中执行。它是一个流行的开源OCR工具,可以在许多不同的操作系统上运行。Tess4J是一个基于Tesseract OCR引擎的Java接口,可以用来识别图像中的文本,说白了,就是封装了它的API,让Java可以直接调用。 Tess

使用Spring Boot集成Spring Data JPA和单例模式构建库存管理系统

引言 在企业级应用开发中,数据库操作是非常重要的一环。Spring Data JPA提供了一种简化的方式来进行数据库交互,它使得开发者无需编写复杂的JPA代码就可以完成常见的CRUD操作。此外,设计模式如单例模式可以帮助我们更好地管理和控制对象的创建过程,从而提高系统的性能和可维护性。本文将展示如何结合Spring Boot、Spring Data JPA以及单例模式来构建一个基本的库存管理系统

Spring Boot集成PDFBox实现电子签章

概述 随着无纸化办公的普及,电子文档的使用越来越广泛。电子签章作为一种有效的身份验证方式,在很多场景下替代了传统的纸质文件签名。Apache PDFBox 是一个开源的Java库,可以用来渲染、生成、填写PDF文档等操作。本文将介绍如何使用Spring Boot框架结合PDFBox来实现电子签章功能。 准备工作 环境搭建:确保你的开发环境中安装了JDK 8或更高版本,并且配置好了Maven或

springboot+maven搭建的项目,集成单元测试

springboot+maven搭建的项目,集成单元测试 1.在pom.xml文件中引入单元测试的依赖包 <!--单元测试依赖--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></depen

Java消息队列:RabbitMQ与Kafka的集成与应用

Java消息队列:RabbitMQ与Kafka的集成与应用 大家好,我是微赚淘客返利系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿! 在现代的分布式系统中,消息队列是实现系统间通信、解耦和提高可扩展性的重要组件。RabbitMQ和Kafka是两个广泛使用的消息队列系统,它们各有特点和优势。本文将介绍如何在Java应用中集成RabbitMQ和Kafka,并展示它们的应用场景。 消息队

java后端服务监控与告警:Prometheus与Grafana集成

Java后端服务监控与告警:Prometheus与Grafana集成 大家好,我是微赚淘客返利系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿! 在现代的微服务架构中,监控和告警是确保服务稳定性的关键组成部分。Prometheus和Grafana是两个强大的工具,它们可以集成在一起,为Java后端服务提供实时监控和可视化告警。 服务监控的重要性 服务监控可以帮助我们实时了解服务的健

环信_Android_第一部_JAR包集成

自己新建 project...不用easeui的包,太不友好了..全部自己解封.自己写 个是在要Android studio 3.3.2版本中测试有效在android7和8(API24,25,26,27)四个个版本中有效. 如果到了Adnroid9(API28,Q)会有so报错.在AndroidMaifest.xml有两处用☆标出来 注意三点. 1:复制两个文件夹文件 libs.av 是