开启成长之旅!这是我参与「日新计划 2 月更文应战」的第 2 天,点击检查活动概况
在博主 newbee-mall-pro 这个项目中供给了线上演示站点,演示用户依照供给的后台用户账号/暗码能够登录到办理后台,用户登录后台能够检查后台数据,可是不能让用户能够修正、删去、新增数据。为了在已有项目基础上到达这个要求而不失简洁,博主决议根据 Spring
得阻拦器完成了的线上演示站点得只能检查不行操作得要求,当前环境说明如下:
-
Spring boot
版别 3.0.2 - 演示项目地址:github.com/wayn111/new…
- github地址:github.com/wayn111欢迎咱们关注,点个star
一、 新建演示站点阻拦器
新建一个 AdminViewModelInterceptor
类完成 HandlerInterceptor
接口,并重写 preHandle
方法,判别 viewModel
为 true
就运用 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 权限办理的后台项目中咱们只需要装备用户对菜单按钮访问权限也能到达这个要求。