JWT 存储 token 通过 Nacos OpenFeign 实现远程调用

This commit is contained in:
2023-08-22 09:22:52 +08:00
parent 02e76a8091
commit 2d57dee888
31 changed files with 1867 additions and 69166 deletions

View File

@@ -35,12 +35,6 @@
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-oauth2</artifactId>
<version>2.2.5.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>

View File

@@ -2,7 +2,6 @@ package com.test;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.security.oauth2.client.EnableOAuth2Sso;
import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.security.oauth2.config.annotation.web.configuration.EnableResourceServer;
@@ -12,9 +11,13 @@ import org.springframework.security.oauth2.config.annotation.web.configuration.E
*
* @author yovinchen
* @Create 2023/8/14 16:25
* <p>
* 如果先使用 @EnableResourceServer 注解,再使用 @EnableFeignClients 注解,则 Feign 客户端可能无法正常工作。
* 因为在启用资源服务器之后Spring Security 会拦截所有请求并进行身份验证和授权处理。
* 而 Feign 客户端发送请求时也需要经过 Spring Security 的处理流程,如果没有正确配置权限规则,则可能导致访问被拒绝或者出现其他错误。
*/
@EnableResourceServer
@EnableFeignClients
@EnableResourceServer
@SpringBootApplication
public class BorrowApplication {
public static void main(String[] args) {

View File

@@ -12,7 +12,6 @@ import com.test.service.client.BookClient;
import com.test.service.client.UserClient;
import org.springframework.security.oauth2.client.OAuth2RestTemplate;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;
import javax.annotation.Resource;
import java.util.List;
@@ -37,15 +36,20 @@ public class BorrowServiceImpl implements BorrowService {
@Resource
UserClient userClient;
// @Resource
// OAuth2RestTemplate template;
@Override
public UserBorrowDetail getUserBorrowDetailByUid(int uid) {
List<Borrow> borrow = mapper.getBorrowsByUid(uid);
//这里通过调用getForObject来请求其他服务并将结果自动进行封装
//获取User信息
// User user = template.getForObject("http://userservice/user/" + uid, User.class);
User user = userClient.getUserById(uid);
//获取每一本书的详细信息
List<Book> bookList = borrow.stream()
.map(b -> bookClient.getBookById(b.getBid()))
List<Book> bookList = borrow.stream().map(b ->
// template.getForObject("http://bookservice/book/" + b.getBid(), Book.class))
bookClient.getBookById(b.getBid()))
.collect(Collectors.toList());
return new UserBorrowDetail(user, bookList);
}

View File

@@ -10,6 +10,13 @@ spring:
name: borrowservice
security:
oauth2:
client:
client-id: web
client-secret: 654321
#Token获取地址
access-token-uri: http://localhost:8500/sso/oauth/token
#验证页面地址
user-authorization-uri: http://localhost:8500/sso/oauth/authorize
resource:
jwt:
key-value: lbwnb #注意这里要跟验证服务器的密钥一致,这样算出来的签名才会一致
@@ -19,3 +26,5 @@ feign:
enabled: true
#同时开启负载均衡支持
load-balanced: true