【华夏OA项目实战】E2-25 为SpringMVC集成认证与授权服务

本课程开发软件与项目初始代码可以通过云盘下载,答疑服务可以关注视频片头的二维码获取。
https://www.123912.com/s/A75eVv-27mod,提取码:yton

教学视频

上节课我们知道了RBAC权限模型,这节课我们继续往下写代码,让SaToken框架能调用SQL语句查询到用户具备的权限,这样就算是把SaToken的授权服务集成到了MIS项目中。

一、编写hxoa-oms子系统

com.example.hxoa.cloud.dubbo包中,创建UserApi.java接口。

package com.example.hxoa.cloud.dubbo;

import com.example.hxoa.cloud.common.general.R;

public interface UserApi {
    public R searchUserPermissions(long id);
    public R searchUserRoles(long id);
}

com.example.hxoa.cloud.oms.api包中,创建UserApiHandler.java类。

package com.example.hxoa.cloud.oms.api;

import com.alibaba.csp.sentinel.annotation.SentinelResource;
import com.example.hxoa.cloud.common.general.R;
import com.example.hxoa.cloud.dubbo.UserApi;
import com.example.hxoa.cloud.oms.db.dao.UserMapper;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.apache.dubbo.config.annotation.DubboService;

import java.util.ArrayList;
import java.util.HashMap;

@DubboService
@Slf4j
public class UserApiHandler implements UserApi {
    @Resource
    private UserMapper userMapper;

    @Override
    @SentinelResource("UserApiHandler.searchUserPermissions")
    public R searchUserPermissions(long id) {
        ArrayList<String> permissions = userMapper.searchUserPermissions(id);

        return R.ok().setAttributeAll(new HashMap(){{
            put("permissions", permissions);
            put("status","SUCCESS");
        }});
    }

    @Override
    @SentinelResource("UserApiHandler.searchUserRoles")
    public R searchUserRoles(long id) {
        ArrayList<String> roles = userMapper.searchUserRoles(id);

        return R.ok().setAttributeAll(new HashMap(){{
            put("roles", roles);
            put("status","SUCCESS");
        }});
    }
}

二、编写hxoa-mis子系统

com.example.hxoa.cloud.dubbo包中,创建UserApi.java接口。

package com.example.hxoa.cloud.dubbo;

import com.example.hxoa.cloud.common.general.R;

public interface UserApi {
    public R searchUserPermissions(long id);
    public R searchUserRoles(long id);
}

com.example.hxoa.cloud.mis.config包中,创建StpUtilImpl.java类。

package com.example.hxoa.cloud.mis.config;

import cn.dev33.satoken.stp.StpInterface;
import cn.hutool.core.convert.Convert;
import cn.hutool.core.map.MapUtil;
import com.example.hxoa.cloud.common.exception.HxoaException;
import com.example.hxoa.cloud.common.general.R;
import com.example.hxoa.cloud.dubbo.UserApi;
import lombok.extern.slf4j.Slf4j;
import org.apache.dubbo.config.annotation.DubboReference;
import org.springframework.stereotype.Component;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

@Component
@Slf4j
public class StpUtilImpl implements StpInterface {
    @DubboReference
    private UserApi userApi;

    @Override
    public List<String> getPermissionList(Object loginId, String loginType) {
        long userId = Convert.toLong(loginId);
        R r = userApi.searchUserPermissions(userId);
        Map result = r.getAttributeAll();
        String status = MapUtil.getStr(result, "status");
        if ("SUCCESS".equals(status)) {
            ArrayList<String> list = (ArrayList<String>) result.get("permissions");
            if (list == null || list.isEmpty()) {
                throw new HxoaException("获取权限失败");
            }
            return list;
        }
        else {
            throw new HxoaException("获取权限失败");
        }
    }

    @Override
    public List<String> getRoleList(Object loginId, String loginType) {
        long userId = Convert.toLong(loginId);
        R r = userApi.searchUserRoles(userId);

        Map result = r.getAttributeAll();
        String status = MapUtil.getStr(result, "status");
        if ("SUCCESS".equals(status)) {
            ArrayList<String> list = (ArrayList<String>) result.get("roles");
            if (list == null || list.isEmpty()) {
                throw new HxoaException("获取角色失败");
            }
            return list;
        }
        else {
            throw new HxoaException("获取角色失败");
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值