基于拦截器实现线上演示站点只能查看不可操作得要求

简介: 基于拦截器实现线上演示站点只能查看不可操作得要求

image.png

开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 2 天,点击查看活动详情

在博主 newbee-mall-pro 这个项目中提供了线上演示站点,演示用户按照提供的后台用户账号/密码可以登录到管理后台,用户登录后台可以查看后台数据,但是不能让用户可以修改、删除、新增数据。为了在已有项目基础上达到这个要求而不失简洁,博主决定基于 Spring 得拦截器实现了的线上演示站点得只能查看不可操作得要求,当前环境说明如下:

一、 新建演示站点拦截器

新建一个 AdminViewModelInterceptor 类实现 HandlerInterceptor 接口,并重写 preHandle 方法,判断 viewModeltrue 就使用 ajax 返回 请下载项目源代码,演示模式无法修改! 得响应信息。

/**
 * 演示模式拦截器
 */
public class AdminViewModelInterceptor implements HandlerInterceptor {
    private final boolean viewModel;
    public AdminViewModelInterceptor(boolean viewModel) {
        this.viewModel = viewModel;
    }
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object o) throws Exception {
        if (viewModel) {
            ServletUtil.renderString(response, JSONObject.toJSONString(R.error("请下载项目源代码,演示模式无法修改!")));
            return false;
        }
        return true;
    }
    @Override
    public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception {
    }
    @Override
    public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception {
    }
}

二、添加WebConfig配置类

新建一个 WebConfig 类实现 WebMvcConfigurer 接口,重写 addInterceptors() 方法将我们自己得AdminViewModelInterceptor 拦截器注册到 Spring 中,使用 addPathPatterns() 指定拦截路径,使用 excludePathPatterns() 指定哪些路径不需要拦截。

@Configuration
public class WebConfig implements WebMvcConfigurer {
    @Value("${wayn.viewModel}")
    private boolean viewModel;
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        // 后台演示模式拦截器
        registry.addInterceptor(new AdminViewModelInterceptor(viewModel))
                .addPathPatterns("/admin/**")
                .excludePathPatterns("/admin/login").excludePathPatterns("/admin")
                .excludePathPatterns("/admin/statistics").excludePathPatterns("/admin/goods")
                .excludePathPatterns("/admin/goods/add").excludePathPatterns("/admin/goods/edit/*")
                .excludePathPatterns("/admin/goods/list").excludePathPatterns("/admin/users")
                .excludePathPatterns("/admin/users/list").excludePathPatterns("/admin/carousels")
                .excludePathPatterns("/admin/carousels/list").excludePathPatterns("/admin/indexConfigs")
                .excludePathPatterns("/admin/indexConfigs/list").excludePathPatterns("/admin/categories")
                .excludePathPatterns("/admin/categories/list").excludePathPatterns("/admin/orders")
                .excludePathPatterns("/admin/categories/listForSelect").excludePathPatterns("/admin/orders")
                .excludePathPatterns("/admin/orders/list").excludePathPatterns("/admin/coupon")
                .excludePathPatterns("/admin/coupon/list").excludePathPatterns("/admin/seckill")
                .excludePathPatterns("/admin/seckill/list").excludePathPatterns("/admin/profile")
                .excludePathPatterns("/admin/logout").excludePathPatterns("/admin/dist/**")
                .excludePathPatterns("/admin/plugins/**");
    }
}

如上代码展示,我们指定了管理后台请求路径中一定包含得 /admin 前缀作为指定拦截路径,这样就会拦截后台全部请求,然后再排除路径中,排除掉我们希望用户可以看到的列表数据请求路径,这样就实现了线上演示站点只能查看不能操作得需求。

三、配置文件使用环境变量

第二步中,我们将 viewModel 传给了 AdminViewModelInterceptor 内部,为 true 就不让用户进行操作,为 false 则放过请求。我们在本地开发时,会将 viewModel 设置为 true 方便开发,再部署到演示站点上时,会将 viewModel 设置 false,不让用户进行操作。再实际开发中,博主是不希望在部署到演示站点上时还需要修改配置文件的,如果由于人为忘记修改会导致演示站点被人修改,那会造成脏数据问题,于是博主决定在配置文件中使用环境变量来达到不修改配置文件的要求。 配置如下:

# wayn配置
wayn:
  # 读取环境变量WAYN_VIEW_MODEL作为viewModel的结果,如果没有这个变量默认为false
  viewModel: ${WAYN_VIEW_MODEL:false} 

四、总结

其实为了实现线上演示站点只能查看不可操作得要求,还有很多别的方式,比如在一个包含 rbac 权限管理的后台项目中我们只需要配置用户对菜单按钮访问权限也能达到这个要求。

目录
相关文章
若依修改,修改代理线上接口登录后台,若依框架如何使用线上的接口,如何在本地获取网页上的接口
若依修改,修改代理线上接口登录后台,若依框架如何使用线上的接口,如何在本地获取网页上的接口
|
6月前
|
前端开发
若依部署,部署常见流程之先部署网页的后端系统,让自己的前端能够看到内容,先部署后端,让前端在本地跑起来-----吃饱了撑死了大佬建议,正确的部署流程
若依部署,部署常见流程之先部署网页的后端系统,让自己的前端能够看到内容,先部署后端,让前端在本地跑起来-----吃饱了撑死了大佬建议,正确的部署流程
|
安全 前端开发 数据安全/隐私保护
登录的功能的实现和登录功能的拦截信息(课时十六)
登录的功能的实现和登录功能的拦截信息(课时十六)
74 0
|
缓存 小程序 前端开发
【易售小程序项目】请求包创建+登录功能实现【基于若依管理系统开发】
【易售小程序项目】请求包创建+登录功能实现【基于若依管理系统开发】
151 0
|
前端开发
前端学习笔记202307学习笔记第六十一天-模拟实现拦截器功能3
前端学习笔记202307学习笔记第六十一天-模拟实现拦截器功能3
54 0
|
前端开发
前端学习笔记202307学习笔记第六十一天-模拟实现拦截器功能1
前端学习笔记202307学习笔记第六十一天-模拟实现拦截器功能1
39 0
|
前端开发
前端学习笔记202307学习笔记第六十一天-模拟实现拦截器功能2
前端学习笔记202307学习笔记第六十一天-模拟实现拦截器功能2
72 0
|
弹性计算 小程序
阿里云学生验证网页入口及流程
阿里云学生验证网页入口及流程,阿里云学生用户完成学生认证可以免费领取一台阿里云服务器,那么问题来了,阿里云学生验证申请入口​在哪?阿里云百科分享阿里云学生验证入口网页链接及学生认证全流程
820 0
|
开发者
四种拦截方式 | 学习笔记
快速学习四种拦截方式。
144 0
四种拦截方式 | 学习笔记
|
前端开发 开发者 微服务
后台系统登录改造和跨域 | 学习笔记
快速学习后台系统登录改造和跨域
后台系统登录改造和跨域 | 学习笔记