ruoyi-cloud-plus添加一个不要认证的公开新页面

ruoyi-cloud-plus添加一个不要认证的公开新页面

版本
RuoYiCloudPlus v2.1.2
plus-ui Vue3 ts

以新增一个公开的课程搜索页面为例。

一、前端

1. 组件创建

在view目录下创建一个页面的vue代码,比如

language-bash
1
src/views/customer/searchPage/index.vue

2. src/router/index.ts

为其编制一个路由。在constantRoutes中添加一组dict信息。比如

language-typescript
1
2
3
4
5
6
{

path: '/courseSearch',
component: () => import('@/views/customer/searchPage/index.vue'),
hidden: true
},

3. src/permission.ts

把页面加入前端的whiteList

language-typescript
1
2
3
4
5
6
const whiteList = [
'/login',
'/register',
'/social-callback',
'/courseSearch'
];

在浏览器输入http://localhost/courseSearch,至此这个页面已经不用登录就可以访问了。

二、后端

但是后端是有网关和认证模块的,虽然前端页面可以不用登陆了,但是如果这个页面还需要从后端获取数据,那么后端对应的controller也应该被open。

1. 设计思想

不同模块有不同的url前缀,比如

language-txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
routes:
# 认证中心
- id: ruoyi-auth
uri: lb://ruoyi-auth
predicates:
- Path=/auth/**
filters:
- StripPrefix=1
# 代码生成
- id: ruoyi-gen
uri: lb://ruoyi-gen
predicates:
- Path=/tool/**
filters:
- StripPrefix=1

并且每个模块都有可能需要open一些controller,不需要认证。那么我们进行统一设定,比如课程模块,url前缀为course,那么/course/open/**就都是被公开的端点。于是在gateway只需要把/*/open/**加入白名单即可。

2. ruoyi-gateway.yml

在nacos中修改gateway的配置文件,把/*/open/**加入whites。

language-yaml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
security:
ignore:
whites:
- /auth/code
- /auth/logout
- /auth/login
- /auth/binding/*
- /auth/social/callback
- /auth/register
- /auth/tenant/list
- /resource/sms/code
- /*/v3/api-docs
- /*/error
- /csrf
- /*/open/**

3. 开发Controller

在course模块中,新建一个CourseOpenController.java,内容示例如下

language-java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
package org.dromara.course.controller;

import org.dromara.course.domain.bo.CourseCategoryBo;
import org.dromara.course.domain.vo.CourseCategoryVo;
import org.dromara.course.service.CourseCategoryService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

@RestController
@RequestMapping("/open")
public class CourseOpenController {


@Autowired
CourseCategoryService categoryService;


@GetMapping("/category/list")
public List<CourseCategoryVo> list(CourseCategoryBo bo) {

return categoryService.queryList(bo);
}


}

重启网关和课程模块即可。