在搭建Springboot项目后台管理系统时,后台登录接口通过feign请求auth2获取token报错:
feign.FeignException$Unauthorized: [401] during [POST] to [http://authorization-server/oauth/token?grant_type=password&username=admin&password=102131456&login_type=admin_type&Authorization=Basic%20Y29pbi1hcGk6Y29pbi1zZWNyZXQ%3D] [OAuth2FeignClient#getToken(String,String,String,String,String)]: [{"timestamp":"2024-07-23T10:44:53.456+0000","status":401,"error":"Unauthorized","message":"Unauthorized","path":"/oauth/token"}]
主要原因是feign调用接口的Authorization把请求设置RequestParam导致报这个错,修改成RequestHeader即可,代码如下:
package org.tfq.feign;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RequestParam;
import org.tfq.model.JwtToken;
/**
* @author: fqtang
* @date: 2024/07/23/10:16
* @description: 调用授权服务器获取token
*/
@FeignClient(value = "authorization-server")
public interface OAuth2FeignClient {
/**
* 登录接口
* @param grant_type 授权类型
* @param username 账号
* @param password 密码
* @param login_type 登录类型
* @param basic_auth token的认证账号和密码,第三方客户端加密数据,注意要用请求头
* @return 登录结果(包含菜单和权限)
*/
@PostMapping("/oauth/token")
ResponseEntity<JwtToken> getToken(
@RequestParam("grant_type") String grant_type,
@RequestParam("username") String username,
@RequestParam("password") String password,
@RequestParam("login_type") String login_type,
@RequestHeader("Authorization") String basic_auth);
}
若有其他问题请留言。