SpringBoot3集成Spring Authorization Server搭建服务认证中心

1. 概述

OAuth 是描述授权过程的开放标准,它可用于授权用户访问 API,OAuth 授权服务器负责对用户进行身份验证并颁发包含用户数据和适当访问策略的访问令牌。之前介绍过低版本的集成方案SpringCloud搭建微服务之OAuth2.1认证和授权,在新版本中集成SpringBoot更加方便和简洁,只需要在application.yml中配置就行

2. 版本说明

SpringBoot:3.3.3
Spring Authorization Server:1.3.2
JDK:17

3. 搭建认证中心

可以直接使用Spring Initializr搭建基础框架,选择需要的maven依赖

3.1. 引入核心依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-oauth2-authorization-server</artifactId>
</dependency>

3.2. 编写application.yml配置文件

server:
  port: 9000

spring:
  security:
  	user:
      name: admin
      password: 123456
    oauth2:
      authorizationserver:
        issuer: http://localhost:9000
        client:
          messageing-client:
            registration:
              client-id: messageing-client
              client-secret: '{noop}secret'
              client-name: Articles Client
              client-authentication-methods:
                - client_secret_basic
              authorization-grant-types:
                - authorization_code
                - refresh_token
              redirect-uris:
                - http://127.0.0.1:8080/login/oauth2/code/messageing-client-oidc
                - http://127.0.0.1:8080/authorized
              scopes:
                - openid
                - profile
                - message.read
                - message.write
            require-authorization-consent: true

3.3. 编写主启动类

编写一个SpringBoot项目的主启动类

@SpringBootApplication
public class AuthorizationServerApplication {

    public static void main(String[] args) {
        SpringApplication.run(AuthorizationServerApplication.class, args);
    }
}

至此就完成了认证中心的搭建

后记

如果不想直接配置在application.yml文件中,也可以编写config配置文件,如果需要持久化用户登录信息和客户端信息,需要在config配置文件中声明,如下所示:

@Bean
UserDetailsService userDetailsService() {
    PasswordEncoder encoder = PasswordEncoderFactories.createDelegatingPasswordEncoder();
    UserDetails userDetails = User.builder()
            .username("admin")
            .password("123456")
            .passwordEncoder(encoder::encode)
            .roles("USER")
            .build();
    return new InMemoryUserDetailsManager(userDetails);
}
  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
目标检测(Object Detection)是计算机视觉领域的一个核心问题,其主要任务是找出图像中所有感兴趣的目标(物体),并确定它们的类别和位置。以下是对目标检测的详细阐述: 一、基本概念 目标检测的任务是解决“在哪里?是什么?”的问题,即定位出图像中目标的位置并识别出目标的类别。由于各类物体具有不同的外观、形状和姿态,加上成像时光照、遮挡等因素的干扰,目标检测一直是计算机视觉领域最具挑战性的任务之一。 二、核心问题 目标检测涉及以下几个核心问题: 分类问题:判断图像中的目标属于哪个类别。 定位问题:确定目标在图像中的具体位置。 大小问题:目标可能具有不同的大小。 形状问题:目标可能具有不同的形状。 三、算法分类 基于深度学习的目标检测算法主要分为两大类: Two-stage算法:先进行区域生成(Region Proposal),生成有可能包含待检物体的预选框(Region Proposal),再通过卷积神经网络进行样本分类。常见的Two-stage算法包括R-CNN、Fast R-CNN、Faster R-CNN等。 One-stage算法:不用生成区域提议,直接在网络中提取特征来预测物体分类和位置。常见的One-stage算法包括YOLO系列(YOLOv1、YOLOv2、YOLOv3、YOLOv4、YOLOv5等)、SSD和RetinaNet等。 四、算法原理 以YOLO系列为例,YOLO将目标检测视为回归问题,将输入图像一次性划分为多个区域,直接在输出层预测边界框和类别概率。YOLO采用卷积网络来提取特征,使用全连接层来得到预测值。其网络结构通常包含多个卷积层和全连接层,通过卷积层提取图像特征,通过全连接层输出预测结果。 五、应用领域 目标检测技术已经广泛应用于各个领域,为人们的生活带来了极大的便利。以下是一些主要的应用领域: 安全监控:在商场、银行
Spring Authorization Server 中,可以通过自定义异常处理器来处理授权服务器中可能发生的异常,以提供更好的用户体验。 要自定义异常处理器,可以按照以下步骤进行: 1. 创建一个实现了 `org.springframework.security.oauth2.server.endpoint.OAuth2AuthorizationExceptionProblemHandler` 接口的异常处理器类,例如: ```java public class CustomAuthorizationExceptionProblemHandler implements OAuth2AuthorizationExceptionProblemHandler { @Override public ResponseEntity<OAuth2Error> handle(HttpServletRequest request, HttpServletResponse response, OAuth2Exception exception) throws IOException { // 自定义处理逻辑 return new ResponseEntity<>(new OAuth2Error("custom_error"), HttpStatus.BAD_REQUEST); } } ``` 2. 在 `AuthorizationServerEndpointsConfigurer` 中配置异常处理器,例如: ```java @Configuration @EnableAuthorizationServer public class AuthorizationServerConfig extends AuthorizationServerConfigurerAdapter { @Override public void configure(AuthorizationServerEndpointsConfigurer endpoints) throws Exception { endpoints.exceptionTranslator(new CustomOAuth2WebResponseExceptionTranslator()) .exceptionHandler(new CustomAuthorizationExceptionProblemHandler()); } // 其他配置... } ``` 在上面的示例中,`CustomAuthorizationExceptionProblemHandler` 类是自定义的异常处理器,它会在授权服务器发生异常时被调用,处理异常并返回自定义的错误响应。同时,还配置了一个 `CustomOAuth2WebResponseExceptionTranslator` 来处理异常。 需要注意的是,自定义的异常处理器和异常翻译器都需要实现 Spring Authorization Server 中对应的接口,并且在 `AuthorizationServerEndpointsConfigurer` 中进行配置。 另外,还可以通过实现 `org.springframework.web.servlet.HandlerExceptionResolver` 接口来对授权服务器中的异常进行全局处理,例如: ```java @RestControllerAdvice public class GlobalExceptionHandler implements HandlerExceptionResolver { @ResponseBody @ExceptionHandler(OAuth2AuthenticationException.class) public ResponseEntity<OAuth2Error> handleOAuth2AuthenticationException(OAuth2AuthenticationException ex) { // 自定义处理逻辑 return new ResponseEntity<>(new OAuth2Error("custom_error"), HttpStatus.BAD_REQUEST); } // 其他异常处理逻辑... } ``` 在上面的示例中,`GlobalExceptionHandler` 是一个全局异常处理器,它可以处理授权服务器中的所有异常,包括身份验证异常、访问令牌异常等。需要注意的是,全局异常处理器需要被声明为 `@RestControllerAdvice`,并实现 `HandlerExceptionResolver` 接口。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值