springcloud集成Oauth2权限项目-oauth调用user服务获取数据库用户信息(八)

 

上一篇《springcloud集成Oauth2权限项目-oauth服务使用jwt获取access_token(password模式)(七)》获取用户是在oauth服务写死用户名和密码,现在要改造,oauth调用user服务去获取用户信息。

springcloud集成Oauth2权限项目-oauth调用user服务获取数据库用户信息(八)_第1张图片

改造......

首先在oauth和user创建关于用户信息的实体bean,取名UserVo

springcloud集成Oauth2权限项目-oauth调用user服务获取数据库用户信息(八)_第2张图片

在user服务中添加获取用户信息的接口

@GetMapping("/getUserByUsername/{username}")
    public UserVo getUserByUsername(@PathVariable String username){
        EntityWrapper sysUserEntityWrapper = new EntityWrapper<>();
        sysUserEntityWrapper.eq("username",username);
        SysUser sysUser = sysUserService.selectOne(sysUserEntityWrapper);
        if(sysUser==null){
            return null;
        }
        UserVo userVo = new UserVo(sysUser.getUserId().longValue(),sysUser.getUsername(),sysUser.getPassword());
        return userVo;
    }

这个接口传入username,然后根据用户名查找用户。并返回userVo实体对象。user服务改造完成

现在改造oauth服务

添加相应的实体userVo,用于接收user服务返回的实体信息

springcloud集成Oauth2权限项目-oauth调用user服务获取数据库用户信息(八)_第3张图片

下一步,利用feign调用user服务

创建UserService接口类

springcloud集成Oauth2权限项目-oauth调用user服务获取数据库用户信息(八)_第4张图片

其中fallback是容错处理。在网络请求时,可能会出现异常请求,如果还想再异常情况下使系统可用,那么就需要容错处理。

当调用user服务不可用时,则会进入容错处理,我这里容错类是UserServiceImpl

springcloud集成Oauth2权限项目-oauth调用user服务获取数据库用户信息(八)_第5张图片

当user服务不可用时会返回空。

改造核心的类UserDetailsServiceImpl

springcloud集成Oauth2权限项目-oauth调用user服务获取数据库用户信息(八)_第6张图片

@Component("userDetailsService")
public class UserDetailsServiceImpl implements UserDetailsService {

    @Autowired
    private UserService userService;

    @Override
    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
        UserVo userVo = userService.getUserByUsername(username);
        if (userVo==null) {
            throw new UsernameNotFoundException("用户不存在或密码错误");
        }
        UserVoDetail userVoDetail = new UserVoDetail();
        userVoDetail.setUserId(userVo.getUserId());
        userVoDetail.setUsername(userVo.getUsername());
        userVoDetail.setPassword(userVo.getPassword());
        return userVoDetail;
    }
}

上面这段就是调用user服务获取用户信息接口,然后组装参数,oauth会自动匹配你输入的密码和数据库密码比对,具体怎么认证就只有看源码了《Spring Security Oauth2 认证流程(password模式)》

改造完成。测试:

依次启动项目:eureka----->user------>oauth----->zuul服务

springcloud集成Oauth2权限项目-oauth调用user服务获取数据库用户信息(八)_第7张图片

数据库中有一个用户

POST访问网关:127.0.0.1:9999/oauth/oauth/token?username=hello&password=hello&grant_type=password&scope=scope&client_id=client_id&client_secret=client_secret

springcloud集成Oauth2权限项目-oauth调用user服务获取数据库用户信息(八)_第8张图片

获取成功

我们把用户名少输一个o,会把用户名和密码错误

springcloud集成Oauth2权限项目-oauth调用user服务获取数据库用户信息(八)_第9张图片

改造完成,至于统一格式以后再完善。下一篇准备些把token存入redis中

项目地址:https://github.com/James-Pan0525/vcloud.git

你可能感兴趣的:(springcloud)