细品Spring之RestTemplate

这篇具有很好参考价值的文章主要介绍了细品Spring之RestTemplate。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

细品Spring之RestTemplate,spring,java,后端

细品Spring之RestTemplate,spring,java,后端

第1章:引言

大家好,我是小黑,咱们今天来聊聊Spring框架中的RestTemplate。如果你是个Java程序员,那么你肯定知道Spring框架的重要性。在Spring的众多工具中,RestTemplate是用来简化HTTP通信的一个强大工具。

当咱们谈到Web服务时,无论是消费别人的API还是创建自己的服务,HTTP通信都扮演着核心角色。这就是RestTemplate发光发热的地方。它让与RESTful服务的交互变得易如反掌。简单来说,你要是想通过HTTP获取数据或者发送数据,RestTemplate都能帮你轻松搞定。

但别小看了RestTemplate,它不仅仅是一个发送HTTP请求的工具,它还有很多隐藏的功能和小技巧等着咱们去探索。在接下来的章节中,咱们会一起深入探讨RestTemplate的各种强大功能和最佳实践。咱们的目标是让你能够熟练地使用这个工具,提高你的Java开发效率。

第2章:RestTemplate简介

RestTemplate是Spring提供的用于同步客户端HTTP请求的模板类。它简化了与HTTP服务器交互的过程,让发送请求和接收响应变得更加直接。不仅如此,它还支持将HTTP响应直接转换成你的领域模型。这意味着你不用再手动解析HTTP响应数据了,RestTemplate帮你搞定了!

让我们来看一个简单的例子。假设小黑想要通过GET请求从某个API获取用户信息。代码如下:

import org.springframework.web.client.RestTemplate;

public class RestClient {

    private static final String GET_USER_ENDPOINT = "http://api.example.com/users/{userId}";

    public static void main(String[] args) {
        RestTemplate restTemplate = new RestTemplate();
        String userId = "123"; // 用户ID,用中文表示
        String response = restTemplate.getForObject(GET_USER_ENDPOINT, String.class, userId);
        System.out.println(response);
    }
}

这段代码创建了一个RestTemplate实例,并使用它发送了一个GET请求。getForObject方法会将响应自动转换为String类型。{userId}是一个路径变量,它会被userId的值替换。

但这只是冰山一角。RestTemplate还支持各种HTTP方法,比如POST、PUT、DELETE等。同时,它还支持复杂的请求和响应类型,比如JSON、XML等。咱们可以使用RestTemplate来发送包含JSON数据的POST请求,就像这样:

public void createUser(User newUser) {
    RestTemplate restTemplate = new RestTemplate();
    ResponseEntity<String> response = restTemplate.postForEntity("http://api.example.com/users", newUser, String.class);
    System.out.println(response.getBody());
}

这段代码中,小黑使用了postForEntity方法来发送一个POST请求,创建一个新的用户。请求的主体是一个User对象,RestTemplate会自动将这个对象转换成JSON格式的数据发送给服务器。

RestTemplate的强大之处在于它的灵活性和易用性。无论你是在处理简单的请求还是复杂的Web服务交互,它都能让工作变得轻松愉快。在接下来的章节中,咱们会更深入地探索这些功能。

第3章:开始使用RestTemplate

集成RestTemplate

在Spring项目中使用RestTemplate,通常的做法是将其作为一个Bean注入。这样做的好处是可以利用Spring的依赖注入特性,使得代码更加整洁、易于管理。小黑这里给大家看一个例子:

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;

@Configuration
public class RestClientConfig {

    @Bean
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }
}

这段代码定义了一个配置类RestClientConfig,它有一个方法restTemplate,这个方法用@Bean标注。这样一来,Spring就会在启动时自动创建一个RestTemplate实例,并将其加入到应用上下文中。

使用RestTemplate

一旦RestTemplate作为Bean被配置,咱们就可以在任何需要的地方注入它了。例如,小黑想在一个服务类中使用RestTemplate来调用外部API,可以这么做:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;

@Service
public class ExternalApiService {

    private final RestTemplate restTemplate;

    @Autowired
    public ExternalApiService(RestTemplate restTemplate) {
        this.restTemplate = restTemplate;
    }

    public String callExternalService(String url) {
        return restTemplate.getForObject(url, String.class);
    }
}

这里,ExternalApiService是一个标准的Spring服务类。它通过构造器注入的方式接收了一个RestTemplate实例。然后,咱们可以使用这个实例来发送HTTP请求。

RestTemplate的基本配置

虽然默认的RestTemplate设置对于大多数情况已经足够好,但有时咱们可能需要对其进行一些配置,比如设置超时时间、添加消息转换器等。这里是一个配置超时时间的例子:

import org.springframework.http.client.ClientHttpRequestFactory;
import org.springframework.http.client.SimpleClientHttpRequestFactory;
import org.springframework.web.client.RestTemplate;

@Bean
public RestTemplate restTemplate() {
    ClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory();
    ((SimpleClientHttpRequestFactory) factory).setConnectTimeout(3000); // 连接超时时间,单位毫秒
    ((SimpleClientHttpRequestFactory) factory).setReadTimeout(3000); // 读取超时时间,单位毫秒
    return new RestTemplate(factory);
}

这段代码通过SimpleClientHttpRequestFactory设置了连接和读取的超时时间。这样的配置可以帮助咱们的应用更好地处理网络延迟和服务不可用的情况。

第4章:RestTemplate的核心功能

使用GET方法获取数据

GET请求是最常见的HTTP操作之一,用于从服务器检索数据。下面是一个使用RestTemplate发送GET请求的例子:

import org.springframework.web.client.RestTemplate;

public class DataService {

    private final RestTemplate restTemplate;

    public DataService(RestTemplate restTemplate) {
        this.restTemplate = restTemplate;
    }

    public String getUserData(String userId) {
        String url = "http://api.example.com/users/" + userId;
        return restTemplate.getForObject(url, String.class);
    }
}

在这个例子中,getUserData方法通过RestTemplate发起了一个GET请求,从URL获取用户数据。getForObject方法自动将响应转换成字符串。

发送POST请求

POST请求通常用于向服务器发送数据以创建新资源。RestTemplate也提供了多种方法来发送POST请求,包括postForObjectpostForEntity。以下是一个例子:

import org.springframework.http.ResponseEntity;
import org.springframework.web.client.RestTemplate;

public class UserService {

    private final RestTemplate restTemplate;

    public UserService(RestTemplate restTemplate) {
        this.restTemplate = restTemplate;
    }

    public String createUser(User user) {
        String url = "http://api.example.com/users";
        ResponseEntity<String> response = restTemplate.postForEntity(url, user, String.class);
        return response.getBody();
    }
}

这个方法使用postForEntity发送一个包含用户信息的POST请求。它将User对象作为请求体发送,然后返回一个ResponseEntity对象,其中包含了响应体。

处理PUT和DELETE请求

PUT请求通常用于更新资源,而DELETE请求用于删除资源。RestTemplate提供了putdelete方法来处理这些操作。例如:

public void updateUser(User user, String userId) {
    String url = "http://api.example.com/users/" + userId;
    restTemplate.put(url, user);
}

public void deleteUser(String userId) {
    String url = "http://api.example.com/users/" + userId;
    restTemplate.delete(url);
}

在这里,updateUser方法使用put来发送一个更新请求,而deleteUser方法使用delete来发送一个删除请求。

数据交换格式处理

RestTemplate非常灵活,支持多种数据交换格式,包括JSON和XML。这是通过消息转换器实现的,Spring默认配置了多个消息转换器来处理常见的数据格式。

例如,如果咱们想发送JSON格式的数据,可以直接传递一个对象作为请求体,RestTemplate会自动将其序列化为JSON。类似地,如果响应是JSON格式的,RestTemplate也可以自动将其反序列化为Java对象。

public User getUser(String userId) {
    String url = "http://api.example.com/users/" + userId;
    return restTemplate.getForObject(url, User.class);
}

在这个例子中,getForObject方法期望服务器返回的是JSON格式的数据,并且会自动将其转换为User类的实例。

第5章:高级特性和最佳实践

错误处理和异常管理

当处理HTTP请求时,错误处理是不可避免的。在RestTemplate中,如果HTTP请求失败,它通常会抛出一个RestClientException。但这个异常太过笼统,咱们需要更详细的错误信息来做出适当的响应。

幸运的是,RestTemplate允许咱们自定义错误处理。通过实现ResponseErrorHandler接口,咱们可以处理特定的HTTP状态码或响应。看看下面的例子:

import org.springframework.http.client.ClientHttpResponse;
import org.springframework.stereotype.Component;
import org.springframework.web.client.ResponseErrorHandler;
import java.io.IOException;

@Component
public class CustomErrorHandler implements ResponseErrorHandler {

    @Override
    public boolean hasError(ClientHttpResponse response) throws IOException {
        // 检查响应状态是否表示错误
        return response.getStatusCode().isError();
    }

    @Override
    public void handleError(ClientHttpResponse response) throws IOException {
        // 处理错误的具体逻辑
        // 例如,可以根据不同的HTTP状态码抛出不同的自定义异常
    }
}

在这个例子中,CustomErrorHandler实现了ResponseErrorHandler接口。这样,每当RestTemplate遇到错误响应时,就会调用这个处理器。

定制化RestTemplate

RestTemplate的一个强大之处是它的高度可定制化。例如,咱们可以添加自定义的消息转换器,拦截器,甚至更换底层的HTTP客户端库。

这里是一个添加自定义拦截器的例子。拦截器可以在发送请求之前或者收到响应之后执行一些逻辑,这对于添加日志、修改请求头等操作非常有用。

import org.springframework.http.client.ClientHttpRequestInterceptor;
import org.springframework.web.client.RestTemplate;
import java.util.Collections;

public class RestClientConfig {

    @Bean
    public RestTemplate restTemplate() {
        RestTemplate restTemplate = new RestTemplate();

        ClientHttpRequestInterceptor interceptor = new LoggingInterceptor();
        restTemplate.setInterceptors(Collections.singletonList(interceptor));

        return restTemplate;
    }
}

这段代码创建了一个RestTemplate实例,并为它添加了一个自定义的拦截器LoggingInterceptor

性能优化

在使用RestTemplate时,性能也是一个重要的考虑因素。例如,咱们可能需要配置连接池、调整超时设置或者使用异步请求以提高性能。

使用HttpComponentsClientHttpRequestFactory可以配置连接池和超时,这对于提升性能和处理高并发请求非常重要。

import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
import org.springframework.web.client.RestTemplate;

@Bean
public RestTemplate restTemplate() {
    PoolingHttpClientConnectionManager connectionManager = new PoolingHttpClientConnectionManager();
    connectionManager.setMaxTotal(200);  // 最大连接数
    connectionManager.setDefaultMaxPerRoute(20);  // 每个路由的默认最大连接数

    HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();
    httpClientBuilder.setConnectionManager(connectionManager);

    HttpComponentsClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory(httpClientBuilder.build());
    factory.setConnectTimeout(3000);  // 连接超时时间
    factory.setReadTimeout(3000);  // 读取超时时间

    return new RestTemplate(factory);
}

细品Spring之RestTemplate,spring,java,后端

在这个例子中,咱们配置了一个带有连接池的HTTP客户端,并设置了连接和读取的超时时间。这样的配置有助于处理高负载下的大量HTTP请求。

第6章:RestTemplate与Web服务交互

调用RESTful API

在现代的Web开发中,RESTful API无处不在。通过RestTemplate,咱们可以轻松地与这些API进行交互。比如说,小黑现在要从一个提供天气信息的API获取数据。来看看具体怎么做:

import org.springframework.web.client.RestTemplate;

public class WeatherService {

    private final RestTemplate restTemplate;

    public WeatherService(RestTemplate restTemplate) {
        this.restTemplate = restTemplate;
    }

    public String getWeatherForecast(String city) {
        String url = "http://api.weather.com/forecast/" + city;
        return restTemplate.getForObject(url, String.class);
    }
}

在这个例子中,小黑创建了一个WeatherService类,它有一个方法getWeatherForecast,用来获取特定城市的天气预报。这个方法简单地调用了RestTemplate的getForObject方法,传入了天气API的URL和城市名称,然后返回了API的响应。

处理复杂的响应

有时候,咱们从API获取的响应可能非常复杂,比如包含了嵌套的对象和数组。RestTemplate可以帮助咱们将这些复杂的JSON响应转换成Java对象。假设API返回的天气数据是一个JSON对象,小黑可以创建一个相应的Java类来表示这个数据结构:

public class Weather {
    private String status;
    private Temperature temperature;
    // getter和setter省略
}

public class Temperature {
    private double high;
    private double low;
    // getter和setter省略
}

然后,小黑可以修改WeatherService来处理这种类型的响应:

public Weather getWeatherForecast(String city) {
    String url = "http://api.weather.com/forecast/" + city;
    return restTemplate.getForObject(url, Weather.class);
}

现在,getWeatherForecast方法会自动将JSON响应转换成Weather对象,这样处理起来就方便多了。

客户端和服务端的数据交换

在使用RestTemplate进行数据交换时,重要的是要了解客户端和服务端是如何交互的。例如,当发送POST请求时,客户端通常会发送一个请求体,服务端则根据这个请求体来处理数据并返回响应。

假设小黑现在要向服务端发送一些用户数据:

public class UserService {

    private final RestTemplate restTemplate;

    public UserService(RestTemplate restTemplate) {
        this.restTemplate = restTemplate;
    }

    public String registerUser(User user) {
        String url = "http://api.example.com/users/register";
        ResponseEntity<String> response = restTemplate.postForEntity(url, user, String.class);
        return response.getBody();
    }
}

在这个例子中,registerUser方法发送了一个包含User对象的POST请求到注册API。服务端接收到这个请求后,会处理这个User对象,然后返回一个响应。

第7章:性能优化和安全考虑

性能优化

在高负载的环境下,性能成为了一个关键因素。优化RestTemplate的性能可以从多个方面入手。

  1. 连接池管理
    使用连接池是提高HTTP客户端性能的常用方法。它可以复用现有的连接,减少频繁建立和关闭连接的开销。咱们可以通过配置HttpClient来使用连接池。

    import org.apache.http.impl.client.CloseableHttpClient;
    import org.apache.http.impl.client.HttpClients;
    import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
    import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
    import org.springframework.web.client.RestTemplate;
    
    public RestTemplate createRestTemplate() {
        PoolingHttpClientConnectionManager connectionManager = new PoolingHttpClientConnectionManager();
        connectionManager.setMaxTotal(200); // 设置最大连接数
        connectionManager.setDefaultMaxPerRoute(20); // 设置每个路由的默认最大连接数
    
        CloseableHttpClient httpClient = HttpClients.custom()
                .setConnectionManager(connectionManager)
                .build();
    
        return new RestTemplate(new HttpComponentsClientHttpRequestFactory(httpClient));
    }
    

细品Spring之RestTemplate,spring,java,后端

在这个配置中,小黑使用了Apache HttpClient的PoolingHttpClientConnectionManager来管理连接池。

  1. 异步处理
    当处理大量请求时,使用异步模式可以显著提高性能。这允许程序同时处理多个HTTP请求,而不是依次等待每个请求完成。

    虽然RestTemplate本身不支持异步操作,但咱们可以结合CompletableFuture或其他异步编程技术来实现类似的效果。

安全性考虑

在进行HTTP通信时,确保数据的安全和隐私也是非常重要的。尤其是在处理敏感信息时,需要特别注意。

  1. 使用HTTPS
    在可能的情况下,总是优先使用HTTPS而不是HTTP。HTTPS能为数据传输提供加密,防止中间人攻击。

    restTemplate.getForObject("https://secure-api.example.com/data", String.class);
    

    这个例子中,小黑确保了API请求是通过HTTPS发出的。

  2. SSL证书验证
    在与HTTPS服务交互时,验证SSL证书是保护应用免受恶意攻击的重要手段。在生产环境中,应避免禁用SSL证书验证。

    如果需要自定义SSL处理,可以通过配置HttpClient来实现:

    import javax.net.ssl.SSLContext;
    import org.apache.http.ssl.SSLContextBuilder;
    import org.apache.http.ssl.TrustStrategy;
    import org.apache.http.impl.client.CloseableHttpClient;
    import org.apache.http.impl.client.HttpClients;
    
    public RestTemplate customSSLRestTemplate() throws Exception {
        TrustStrategy acceptingTrustStrategy = (chain, authType) -> true; // 仅作为示例,生产中应遵循严格的SSL验证策略
    
        SSLContext sslContext = SSLContextBuilder.create()
                .loadTrustMaterial(null, acceptingTrustStrategy)
                .build();
    
        CloseableHttpClient httpClient = HttpClients.custom()
                .setSSLContext(sslContext)
                .build();
    
        return new RestTemplate(new HttpComponentsClientHttpRequestFactory(httpClient));
    }
    

    在这个例子中,虽然展示了如何自定义SSL上下文,但小黑要提醒大家,在生产环境中,这种信任所有证书的做法是极其危险的。正确的做法应该是导入特定的证书或使用默认的信任策略。

  3. 处理敏感数据
    当使用RestTemplate发送或接收敏感数据时,确保这些信息不会被泄露。避免在日志中打印敏感信息,使用合适的加密技术来保护数据。

    例如,如果需要在日志中记录请求和响应,可以自定义一个拦截器来遮蔽敏感信息:

    import org.springframework.http.client.ClientHttpRequestInterceptor;
    import org.springframework.http.HttpRequest;
    import org.springframework.http.client.ClientHttpResponse;
    import org.springframework.http.client.ClientHttpRequestExecution;
    import java.io.IOException;
    
    public class MaskingInterceptor implements ClientHttpRequestInterceptor {
        @Override
        public ClientHttpResponse intercept(HttpRequest request, byte[] body, ClientHttpRequestExecution execution) throws IOException {
            // 在这里实现对请求体和响应体的遮蔽逻辑
            return execution.execute(request, body);
        }
    }
    

在这个拦截器中,咱们可以实现对敏感数据的遮蔽,确保它们不会出现在日志中。

通过这些性能优化和安全措施,咱们可以确保使用RestTemplate时,应用既快速又安全。记住,优化和安全是一个持续的过程,应该随着应用的发展和变化而不断调整和改进。

第8章:总结

  • 基础使用:RestTemplate提供了一种简洁的方式来处理HTTP请求和响应,使得与Web服务的交互变得简单。
  • 高级特性:通过自定义错误处理、消息转换器和拦截器等,RestTemplate可以灵活应对各种复杂的应用场景。
  • 性能和安全:连接池管理、异步处理和安全性策略的应用,保证了RestTemplate在生产环境下的高效和安全。

Spring框架不断进化,随着Spring 5的推出,一个新的客户端HTTP工具WebClient被引入。与RestTemplate相比,WebClient提供了更现代的、反应式的编程模型,可以更好地处理异步和流式数据。

这并不意味着RestTemplate会立即被淘汰,但WebClient确实是Spring团队对未来HTTP客户端开发的一个方向。如果你对反应式编程感兴趣,或者你的项目需要处理大量的异步数据流,那么学习和使用WebClient会是一个不错的选择。文章来源地址https://www.toymoban.com/news/detail-798134.html

到了这里,关于细品Spring之RestTemplate的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 微信小程序的授权登录-Java 后端 (Spring boot)

    微信开发文档链接:https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/login.html 一个可以测试的微信小程序 此微信小程序的APPID和APPscret(至开发者后台获取) 从时序图我们可以了解到流程大致分为两步: 小程序端获取code后传给Java后台 Java后台获取code后向微信后台接口

    2024年02月09日
    浏览(55)
  • spring框架自带的http工具RestTemplate用法

    RestTemplate是由Spring框架提供的一个可用于应用中调用rest服务的类它简化了与http服务的通信方式。 RestTemplate是一个执行HTTP请求的同步阻塞式工具类,它仅仅只是在 HTTP 客户端库(例如 JDK HttpURLConnection,Apache HttpComponents,okHttp 等)基础上,封装了更加简单易用的模板方法 AP

    2024年02月13日
    浏览(37)
  • “从零开始学习Spring Boot:快速搭建Java后端开发环境“

    标题:从零开始学习Spring Boot:快速搭建Java后端开发环境 摘要:本文将介绍如何从零开始学习Spring Boot,并详细讲解如何快速搭建Java后端开发环境。通过本文的指导,您将能够快速搭建一个基于Spring Boot的Java后端开发环境并开始编写代码。 正文: 一、准备工作 在开始之前,

    2024年02月15日
    浏览(58)
  • 再见RestTemplate,Spring 6.1新特性:RestClient 了解一下!

    在最近发布的Spring 6.1 M2版本中,推出了一个全新的同步HTTP客户端: RestClient 。用一句话来让Spring开发者认识 RestClient 的话:像 WebClient 一样具备流畅API的 RestTemplate 。所以, RestClient 的使命就是淘汰已经有14年历史的 RestTemplate 。 关于 WebClient 和 RestTemplate ,之前在几种服务消

    2024年02月16日
    浏览(33)
  • Spring Cloud 容错机试 Hystrix 服务降级 RestTemplate:

    雪崩效应:   如果短信服务炸了后面的所有服务就会起连锁反应造成全部服务挂掉 , 这就是雪崩效应 , 那么其实短信服务又不是我们主要业务 , 这个时候我们可以采用服务降级 , 服务降级就是暂时的把短信服务停掉能用就返回不能用就返回个错误 , 但是它也不会影响

    2024年02月07日
    浏览(43)
  • Spring 教程—REST 客户端详解(WebClient 、RestTemplate、HTTP 接口)

    Spring框架为调用REST端点提供了以下选择: WebClient - 非阻塞、响应式客户端和 fluent API。 RestTemplate - 带有模板方法API的同步客户端。 HTTP 接口 - 注解式接口,并生成动态代理实现。 WebClient  是一个非阻塞的、响应式的客户端,用于执行HTTP请求。它在5.0中引入,提供了  Re

    2024年02月07日
    浏览(43)
  • 微服务系列-如何使用 RestTemplate 进行 Spring Boot 微服务通信示例

    下面我们将学习如何创建多个 Spring boot 微服务以及如何使用 RestTemplate 类在多个微服务之间进行同步通信。 微服务通信有两种风格: 同步通讯 异步通信 在同步通信的情况下,客户端发送请求并等待服务的响应。这里重要的一点是协议(HTTP/HTTPS)是同步的,客户端代码只有

    2024年02月05日
    浏览(46)
  • 【spring Cloud】微服务通信的三种方式RestTemplate、Feign远程调用与Dubbo的使用

    目录 一、通过RestTemplate调用微服务 二、通过Feign远程调用 三、Dubbo  分布式中的远程调用大概分为两种 RESTful接口  REST,即Representational State Transfer的缩写,如果一个架构符合REST原则,就称它为RESTful架构。 每一个URI代表一种资源; 客户端和服务器之间,传递这种资源的某种

    2024年04月11日
    浏览(48)
  • 2023 最新版IntelliJ IDEA 2023.1创建Java Web前(vue3)后端(spring-boot3)分离 项目详细步骤(图文详解)

    2023 最新版IntelliJ IDEA 2023.1创建Java Web 项目详细步骤(图文详解) 本篇使用当前Java Web开发主流的spring-boot3框架来创建一个Java前后端分离的项目,前端使用的也是目前前端主流的vue3进行一个简单的项目搭建,让你距离Java全栈开发更近一步 🏴‍☠️。 使用版本: “17.0.1”

    2024年02月12日
    浏览(88)
  • Spring Boot 整合 Shiro(后端)

    1 Shiro 什么是 Shiro 官网: http://shiro.apache.org/ 是一款主流的 Java 安全框架,不依赖任何容器,可以运行在 Java SE 和 Java EE 项目中,它的主要作用是对访问系统的用户进行身份认证、 授权、会话管理、加密等操作。 Shiro 就是用来解决安全管理的系统化框架。 2 Shiro 核心组件 用

    2024年02月09日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包