SpringBoot自定义拦截器

本文介绍了一种在前端和后端实现权限控制的方法,通过判断当前登录用户是否为数据创建者来决定是否显示编辑和删除按钮。同时,通过自定义拦截器在后端进行二次验证,确保操作安全性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

现有页面

 

export function updateReport(report, emails, views) {
  const id = report.id
  const reportName = report.reportName
  const safeLevel = report.safeLevel
  const reportUrl = report.reportUrl
  const remark = report.remark
  const reportType = report.reportType
  return request({

    url: '/report/updateReport',
    method: 'post',
    data: {
      id,
      reportName,
      reportUrl,
      safeLevel,
      remark,
      reportType,
      emails,
      views
    }
  })


export function deleteReport(reportId) {
  return request({
    url: '/report/deleteReport',
    method: 'post',
    data: {
      reportId
    }
  })
}

列表有查看、编辑、删除功能,前端判断该条数据的creator与当前登录用户是不是同一个人,如果是则展示编辑和删除按钮。为防止恶意攻击,可以在后端再加个拦截器,双重控制。

先自定义拦截器:


@Component
public class ReportHandler implements HandlerInterceptor{
	
	@Autowired
	private ReportService reportService;

	@Override
	public void afterCompletion(HttpServletRequest arg0,
			HttpServletResponse arg1, Object arg2, Exception arg3)
			throws Exception {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1,
			Object arg2, ModelAndView arg3) throws Exception {
		// TODO Auto-generated method stub
		
	}

	@Override
	public boolean preHandle(HttpServletRequest req, HttpServletResponse arg1,
			Object arg2) throws Exception {
		
		try{
			String requestURI = req.getRequestURI();
            //是删除或者编辑请求
			if(requestURI.indexOf("updateReport")!=-1 || requestURI.indexOf("deleteReport")!=-1){
				String reportId = null;
              //删除的参数为reportId
				if(req.getParameter("reportId") != null){
					reportId = req.getParameter("reportId");
				}
             //编辑的参数为id
				if(req.getParameter("id") != null){
					reportId = req.getParameter("id");
				}
				Report report = reportService.getById(reportId);
				User user = new SessionUtil().getCurrentUser();
				if(!report.getCreator().equals(user.getId())){
					return false;
				}
			}
			return true;
		}catch (Exception e) {
			return true;
		}
		
	}

}

再把拦截器添加到SpringBoot配置中:


@SpringBootConfiguration
public class MySpringMVCConfig extends WebMvcConfigurerAdapter{

	@Autowired
	private ReportHandler reportHandler;

	@Override
	public void addInterceptors(InterceptorRegistry registry) {
		registry.addInterceptor(reportHandler).addPathPatterns("/**");
	}
	
	
}

即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

w_t_y_y

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值