当前位置: 首页 > news >正文

Vue3版JeecgBoot项目实战:5分钟搞定前台官网的免登录访问(附完整路由与白名单配置)

Vue3版JeecgBoot项目实战:5分钟实现官网免登录访问全流程指南

在开发企业官网、产品展示页等公开项目时,强制用户登录才能访问往往会造成用户体验断层。作为基于Vue3的JeecgBoot开发者,你可能遇到过这样的困扰:官网文档对免登录配置的说明较为分散,而业务又急需快速上线公开页面。本文将带你用最短时间打通前后端配置链路,实现真正的"开箱即用"级免登录访问。

1. 前端工程配置实战

1.1 创建公开页面模板

首先在/src/views/public目录下新建展示页面(以产品首页为例):

<template> <div class="public-container"> <header class="product-banner"> <h1>{{ productName }}</h1> </header> <main> <ProductFeature /> <ClientCases /> </main> </div> </template> <script setup lang="ts"> const productName = '智能管理平台' </script> <style scoped> .public-container { max-width: 1200px; margin: 0 auto; } </style>

关键细节

  • 使用scoped样式避免污染全局
  • 组件命名建议采用PascalCase规范
  • 静态资源建议放在/public目录

1.2 动态路由注册方案

/src/router/routes/public.ts中创建独立路由模块:

export const PublicRoutes: AppRouteRecordRaw[] = [ { path: '/product', name: 'ProductHome', component: () => import('/@/views/public/ProductHome.vue'), meta: { title: '产品首页', ignoreAuth: true // 关键标识 } }, { path: '/solution', name: 'SolutionPage', component: () => import('/@/views/public/Solution.vue'), meta: { title: '解决方案', ignoreAuth: true } } ]

然后在主路由文件/src/router/routes/index.ts中合并路由:

import { PublicRoutes } from './public' export const basicRoutes = [ ...PublicRoutes, LoginRoute, // ...其他基础路由 ]

1.3 白名单深度配置

在权限守卫文件/src/router/guard/permissionGuard.ts中,需要处理两种场景:

  1. 路径白名单/src/router/guard/paramMenuGuard.ts):
const whitePathList = [ PageEnum.BASE_LOGIN, '/product', '/solution', '/contact' ]
  1. 路由元信息校验(推荐方案):
router.beforeEach(async (to) => { if (to.meta.ignoreAuth) { return true // 放行标记路由 } // ...正常权限校验 })

常见问题排查

  • 热更新后路由未生效?尝试清除路由缓存
  • 嵌套路由需为每个子路由单独设置ignoreAuth
  • 动态路由需要通过addRoute手动注册

2. 后端接口放行策略

2.1 安全接口配置原则

在后端jeecg-system-module中找到权限配置类,添加放行规则:

@Configuration public class WebSecurityConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { http.authorizeRequests() .antMatchers( "/api/product/**", "/api/solution/list", "/api/public/**" ).permitAll() // ...其他配置 } }

安全建议

  • 使用/**匹配多级路径时要谨慎
  • 公开接口建议统一前缀如/api/public
  • 生产环境应配置速率限制

2.2 Swagger文档特殊处理

如需开放API文档访问,需额外配置:

jeecg: swagger: enable: true auth: false # 关闭鉴权 paths: /v2/api-docs,/webjars/**

2.3 接口缓存优化方案

对于高频访问的公开接口,建议添加缓存注解:

@GetMapping("/api/product/list") @Cacheable(value = "productCache", key = "'all'") public Result<List<ProductVO>> getProductList() { // ... }

3. 全链路调试技巧

3.1 前端调试工具

使用Vue Devtools检查:

  • 路由元信息是否正确传递
  • 网络请求是否携带多余认证头
  • 组件是否被keep-alive意外缓存

调试命令示例

# 查看路由树 console.log(router.getRoutes()) # 检查当前路由守卫 router.beforeHooks.forEach(hook => { console.log(hook.toString()) })

3.2 后端请求追踪

application-dev.yml中开启SQL日志:

logging: level: org.hibernate.SQL: debug org.hibernate.type: trace

3.3 跨环境配置管理

建议使用环境变量区分配置:

# .env.production VITE_PUBLIC_PATHS=/product,/solution # .env.development VITE_PUBLIC_PATHS=/product,/solution,/debug

然后在vite配置中注入:

whitePathList: import.meta.env.VITE_PUBLIC_PATHS.split(',')

4. 高级应用场景

4.1 混合权限页面方案

对于部分内容需要鉴权的页面,可采用条件渲染:

<template> <div> <PublicHeader /> <template v-if="!userStore.getToken"> <GuestContent /> </template> <template v-else> <MemberContent /> </template> </div> </template>

4.2 静态资源CDN优化

vite.config.ts中配置生产环境CDN:

build: { assetsDir: 'static', rollupOptions: { output: { chunkFileNames: 'static/js/[name]-[hash].js', assetFileNames: 'static/[ext]/[name]-[hash].[ext]' } } }

4.3 性能监控接入

使用Sentry监控公开页面性能:

import * as Sentry from '@sentry/vue' app.use(Sentry, { dsn: 'your_dsn', tracesSampleRate: 0.2, beforeSend(event) { if (event.request?.url.includes('/product')) { return null // 过滤公开页面错误 } return event } })

5. 企业级实践建议

5.1 安全审计清单

定期检查以下安全项:

检查项方法频率
接口参数过滤手动测试特殊字符每周
敏感信息泄露代码扫描工具每月
暴力破解防护检查登录日志每日
CSRF防护有效性自动化测试工具每次发布

5.2 灰度发布方案

通过nginx实现按比例放量:

split_clients "${remote_addr}AAA" $variant { 50% "production"; 50% "preview"; } location /product { proxy_pass http://$variant; }

5.3 灾备降级策略

在网关层配置fallback:

@Bean public RouteLocator customRouteLocator(RouteLocatorBuilder builder) { return builder.routes() .route("public_fallback", r -> r.path("/api/public/**") .filters(f -> f.circuitBreaker( c -> c.setFallbackUri("forward:/fallback"))) .uri("lb://jeecg-system")) .build(); }

实际项目中我们发现,将公开页面的路由配置与业务路由物理隔离能显著降低维护成本。比如单独创建public-routes.module.ts,并在构建时通过环境变量控制打包策略,这种架构设计在多个大型项目中验证了其稳定性。

http://www.jsqmd.com/news/901043/

相关文章:

  • 目标检测论文总结
  • 3种场景下的Playnite便携版配置:跨设备游戏库管理完全指南
  • 基于Snowflake与AI向量搜索构建企业级知识产权查重系统
  • 独立开发者如何借助Taotoken的Token Plan降低项目长期成本
  • OpenAI Privacy Filter实战教程:Transformers与Transformers.js双框架调用指南
  • 使用PubMedBERT-base-embeddings构建医学文献语义搜索引擎的5个步骤
  • 从ReactNativeOne学习:如何构建一个完整的React-Native应用架构 - 终极指南
  • Arduino-ESP32终极指南:如何用Arduino轻松开发ESP32物联网项目
  • 如何用Zotero Style插件实现文献阅读进度可视化与智能管理:终极指南
  • FModel终极指南:5分钟掌握虚幻引擎游戏资源提取的完整流程
  • 基于LangGraph构建Android项目智能审计代理:架构设计与工程实践
  • Claude Skills与Commands实战解析:AI编程搭子的自动化利器
  • 写毕业论文用哪个AI?2026年精选6款写论文的AI软件测评,为你打造高质量论文
  • 别再只会用微信截图了!这5种截取右键菜单的隐藏技巧,总有一款适合你
  • bert-base-italian-uncased实战:10个意大利语NLP应用场景
  • 3步解锁微信聊天记录的终极价值:让数字记忆真正属于你
  • FiberPO优化框架揭秘:JoyAI-LLM-Flash-INT4如何提升复杂任务稳定性?
  • 企业级龙虾 Claw 产品怎么选?团队能不能用龙虾?
  • 目前好用的 AI 视频创作平台有哪些?2026 实用平台盘点
  • 别再死记硬背了!用Verilog手搓一个带握手的同步FIFO,从波形图理解Valid/Ready信号
  • Zotero Style终极指南:5分钟打造高效文献管理系统
  • 从半加器到前缀加法器:用Verilog HDL手把手教你搭建一个32位CPU加法单元(附完整代码)
  • 2026年知名的大功率高压清洗机/高压清洗机厂家推荐与选型指南 - 行业平台推荐
  • Gemma-ko-v01未来路线图:即将推出的5大功能,提前了解新特性
  • 2026年评价高的理瓶机二手饮料设备/梁山包膜机二手饮料设备口碑好的厂家推荐 - 行业平台推荐
  • PingFangSC字体包:企业级品牌视觉战略的字体解决方案
  • 别再死记硬背了!用Unity的LookRotation让物体‘看向’目标,这篇保姆级教程带你搞懂原理和实战
  • 别再复制官网代码了!Vue + Ant Design 图标与分隔符的本地化实战(附完整资源包)
  • 手把手教你:MATLAB硬件支持包离线安装与本地化部署全攻略
  • FFmpeg Micro与MCP协议:Claude桌面端视频转码的AI驱动实践