SpringCloud 业务管理后台 通过FeignClient来调用oauth/token接口【SpringCloud系列11】

本文章实现效果如下:

  • 输入用户名与密码后,点击登录调用登录接口
  • 登录成功后,获取到token ,再获取管理后台用户的菜单权限

1 在微服务项目中新增 admin-api 管理后台业务处理模块

关于创建基础的模块在 【1、SpringCloud 项目基础工程搭建 【SpringCloud系列1】】中有详细概述,在这里不做详细描述。 项目目录结构如下:

AdminApplication 启动类配置:

  • 使用到了远程调用认证服务获取token,所以添加 Feign扫描包路径,本项目 Feign 统一管理在 feign-api 项目中
  • @MapperScan 是使用到mybatis-plus来操作数据库
import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.context.annotation.Bean;


@EnableFeignClients(basePackages = "com.biglead.feign.clients")
@SpringBootApplication
@MapperScan(basePackages = "com.biglead.admin.mapper")
public class AdminApplication {
	public static void main(String[] args) {
		SpringApplication.run(AdminApplication.class, args);
	}
	/**
	 * 分页插件
	 */
	@Bean
	public MybatisPlusInterceptor mybatisPlusInterceptor() {
		MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
		interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
		return interceptor;
	}
}

复制代码

2 管理后台登录接口

  • web管理后台调用的接口都通过网关
  • 调用认证服务,通过服务内部 FeignClient 来调用

    管理后台登录接口如下
@Controller
@Slf4j
@RequestMapping("/admin")
public class AdminAuthController {

    @Autowired
    private FeignAuthClient feignAuthClient;
    /**
     * 登录以后返回token
     * @return
     */
    @PostMapping(value = "/login")
    @ResponseBody
    public CommonResult login(@Validated @RequestBody AdminAuthParam authParam) {

        String username = authParam.getUsername();
        String password = authParam.getPassword();
        if(StringUtils.isEmpty(username)||StringUtils.isEmpty(password)){
            return CommonResult.failed("请输入用户名和密码");
        }

        MultiValueMap<String,String> headers = new LinkedMultiValueMap<>();
        headers.add("Content-Type","multipart/form-data");
        headers.add("Authorization","Basic WGNXZWJBcHA6WGNXZWJBcHA=");

        MultiValueMap<String,String> body = new LinkedMultiValueMap<>();
        body.add("username",username);
        body.add("password",password);
        body.add("grant_type","password");
        body.add("scope","all");

        //服务内部调用 认证服务
        Map<String,Object>  map = feignAuthClient.generateToken(body);

        log.info("获取token成功 {}",map);
        Map<String, Object> tokenMap = new HashMap<>();
        tokenMap.put("token", map.get("access_token"));
        tokenMap.put("tokenHead", "");
        return CommonResult.success(tokenMap);
    }

    @ApiOperation(value = "登出功能")
    @PostMapping(value = "/logout")
    @ResponseBody
    public CommonResult logout() {
        return CommonResult.success(null);
    }
}

复制代码

在这里通过 FeignAuthClient 来调用 oauth/token 内部接口获取登录认证令牌,FeignAuthClient定义在 feign-api中

import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.util.MultiValueMap;
import org.springframework.web.bind.annotation.*;

import java.util.Map;

@FeignClient("auth-api")
public interface FeignAuthClient {

    @PostMapping("/oauth/token")
    Object postAccessToken(@RequestParam MultiValueMap<String, String> parameters, 
                           @RequestHeader MultiValueMap<String, String> headers);
                           
    @RequestMapping(method = RequestMethod.POST, value = "/oauth/token", headers = {"Content-Type: multipart/form-data", "Authorization=Basic WGNXZWJBcHA6WGNXZWJBcHA="})
    Map<String,Object> generateToken(@RequestBody MultiValueMap<String, String> map);
}
复制代码

我这里边定义了两种写法,也是对应的不同的 headers 设置方法

3 管理后台获取登录用户的菜单权限

管理后台在调用 login 登录接口获取到 token 后,携带 token 来访问 user/info 接口,获取用户的权限与菜单列表

管理后台配置的一级二级菜单 然后可以创建角色,每个角色可以绑定不同的菜单 然后每个用户可以分配不同的角色

作者:早起的年轻人
链接:https://juejin.cn/post/7214427834994425915
来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值