java定义三套场景接口方案

2023-12-21 15:42:34

一、背景

在前后端分离开发的背景下,后端java开发人员现在只需要编写接口接口。特别是使用微服务开发的接口。resful风格接口。那么一般后端接口被调用有下面三种场景。一、不需要用户登录的接口调用,第二、后端管理系统接口调用(需要账号密码登录),第三、与第三方系统间的接口调用。所以如果同一个接口需要满足这三种场景,就需要做鉴权,要不然无法保障数据的安全。

二、定义三套接口方案

其实三套方法都可以通过token来进行鉴权

1.首先提供一个获取token的接口

	/**
	* 获取远程调用凭证
	*/
	@ApiOperation(value = "获取远程调用凭证", notes = "获取远程调用凭证")
	@PostMapping("getRpcTonken")
	public ResponseData<String> getRpcTonken (@RequestBody Map<String, Object> param) {
		String userName = "";
		String password = "";
		if(param.containsKey("userName")) {
			userName = param.get("userName").toString();
		}
		
		if(param.containsKey("password")) {
			password = param.get("password").toString();
		}
		
		MTokenUser mTokenUserRes = mTokenUserService.searchByUserName(userName,password);
		if (ObjectUtil.isNotEmpty(mTokenUserRes)) {
			//生成token
			return ResponseData.success(redisUtils.generateToken(mTokenUserRes));
		}else {
			log.error(MTokenUserConstant.QUERY_FAILED);
			return ResponseData.error(MTokenUserConstant.QUERY_FAILED);
		}
	}

?通过给定的账号和密码进行制作token,当然这里的账号和密码应该进行加密传输,获取的时候进行解密

    /**
               * 根据账号和密码查询
     * searchByUserName
     */
    public MTokenUser searchByUserName(String userName,String  password) {
        QueryWrapper<MTokenUser> wrapper = new QueryWrapper<MTokenUser>();
        
        wrapper.eq("user_name", userName);
        wrapper.eq("password", password);
        MTokenUser mTokenUser = mTokenUserMapper.selectOne(wrapper);
        return mTokenUser;
    }

?

获取与验证token的合法性

    public   String generateToken(Object user){
        //生成唯一不重复的字符串
        String token = UUID.randomUUID().toString();
        set(RedisKeys.getRpcToken(token), user, 7200);
        return token;
    }
 
    /**
     * 验证token是否合法
     * @param token
     * @return
     */
    public   boolean verify(String token){
    	String s =  get(RedisKeys.getRpcToken(token));
    	if(!StringUtils.isEmpty(s)) {
    		return	true;
    	}else {
    		return	false;
    	}
    	
    	
    }

?

三、在过滤器中对接口进行鉴权

    public boolean memberAppAuth(ServerHttpRequest request, ServerHttpResponse response) {
    	
        // 获取token 小程序登录态认
        String token = request.getHeaders().getFirst(Constant.resToken);
           
        ResponseData<Boolean> res = baseAdminCLient.verifyToken(token );
        if(res.getData()) {
        	return true;	
        } 
        return false;
    }

文章来源:https://blog.csdn.net/dongjing991/article/details/135130395
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。