ruoyi-vue-pro增强——新增通用单点登录模块yudao-module-sso

1、需求分析

在《ruoyi-vue-pro数据大屏——单点登录,告别手输密码》博文中遗留了一个小遗憾:appKey, appSecret是写在前端javascript中的,虽然可以借助加解密解决,但还是觉得不安全

2、解决方案

这篇博文就在 ruoyi-vue-pro 中新增一个通用的SSO客户端模块yudao-oauth2-sso,以实现以下目标:

1)在server端从application.yaml中配置appKey, appSecret等参数。

2)通过后端发送请求到oauth2 server进行验证,避免密码暴露。

3)提供一个通用的oauth2单点登录的模块供其他应用使用。

4)提供获取用户信息、更新用户信息的接口。

      适配Scope配置中配置的两个权限 【user.read、user.write】

4)以后将yudao-module-sso应用于数据大屏

5)提供一个简单的spring-boot应用demo测试使用 yudao-oauth2-sso 

3、实现步骤

1)主要配置

首先需在【系统管理->三方授权->应用管理】中配置好客户端信息,然后在demo应用的application.yaml中增加oauth2配置信息(如有必要可以进行属性加密):

server:
  port: 18080


yudao:
  sso:
    oauth2-server: http://127.0.0.1:48080/admin-api/system/oauth2
    client-key: yudao-sso-demo-by-code
    client-secret: test
    tenant-id: 1

2)新增yudao-module-sso模块

在 ruoyi-vue-pro下新增模块 yudao-module-sso, pom.xml中的依赖如下:

  • 这里不是必须在ruoyi-vue-pro下创建这个模块,也可以直接建立 yudao-module-sso项目,名称也可以随意,因为依赖的都是开源jar, 跟yudao-framework无关。
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <groupId>cn.iocoder.boot</groupId>
        <artifactId>yudao</artifactId>
        <version>${revision}</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>yudao-module-sso</artifactId>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <dependencies>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-annotations</artifactId>
        </dependency>
    </dependencies>

</project>

详细代码见文末下载链接,免费

详细代码见文末下载链接,免费

详细代码见文末下载链接,免费

3)关键代码说明

最终代码结构

oauth 鉴权,用户数据相关的接口类

通用的controller,提供以下接口:

/sso/login-by-code(post)     # code登陆oauth2 server
/sso/refresh-token(post)   
/sso/logout(post)
/sso/user(post)              # 获取用户信息(部门,岗位等),需待token访问所有用post
/sso/user(put)               # 更新用户信息,需待token访问

4、创建Demo应用测试验证

为了方便,不破坏原来的框架代码,我这里就直接复制ruoyi-vue-pro\yudao-example\yudao-sso-demo-by-code模块为ruoyi-vue-pro\yudao-example\yudao-sso-demo-client进行简单改造。

改造点:

1)demo工程加入sso依赖

在ruoyi-vue-pro\yudao-example\yudao-sso-demo-client的pom.xml中加入yudao-module-sso依赖

,代码如下:

        <dependency>
            <groupId>cn.iocoder.boot</groupId>
            <artifactId>yudao-module-sso</artifactId>
            <version>1.8.3-snapshot</version>
        </dependency>

2)组件扫描中加入sso模块

在此加入 cn.iocoder.yudao.sso,cn.iocoder.yudao.module,避免bean没有实例化

@SpringBootApplication(scanBasePackages = {"cn.iocoder.yudao.sso", "cn.iocoder.yudao.module"})
public class SSODemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(SSODemoApplication.class, args);
    }

}

3)修改SecurityConfiguration配置放行 sso 相关controller

找到src\main\java\cn\iocoder\yudao\ssodemo\framework\config\SecurityConfiguration.java文件

做如下修改:

                // 2. 登录相关的接口,可匿名访问
                .antMatchers("/sso/login-by-code").permitAll()
                .antMatchers("/sso/refresh-token").permitAll()
                .antMatchers("/sso/logout").permitAll()
                // last. 兜底规则,必须认证
                .and().authorizeRequests()
                .anyRequest().authenticated();

这里主要是改了一下url,避免与oauth2 server中的接口冲突。

4) 导入sso模块中的 client 及辅助工具类

删除client 及 controller包,修正framework中的类导入,文件结构如下图:

5)启动server 及 sso-demo-client测试


效果如下图:

5、资源下载

通用单点登录模块yudao-module-sso及示例模块 yudao-sso-demo-client资源下载地址

=============    相关博文   ============

ruoyi-vue-pro数据大屏——单点登录,告别手输密码(适用于不带后端服务的情况)

ruoyi-vue-pro优化——如何将一个模块快速变成一个独立的应用进行开发,部署,管理

ruoyi-vue-pro增强——新增通用单点登录模块yudao-module-sso(下载链接在博文末尾)

ruoyi-vue-pro优化——让菜单支持多个参数,一键直达【经营分析】

ruoyi-vue-pro优化——模块单独打包,增量更新、部署,告别打包等待

=============    相关博文  ============

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值