springboot + 拦截器 + 注解 实现自定义权限验证
springboot + 拦截器 + 注解 实现自定义权限验证
最近用到一种前端模板技术:jtwig,在权限控制上没有用springSecurity。因此用拦截器和注解结合实现了权限控制。
1.1 定义权限常量 PermissionConstants.java
public class PermissionConstants {/*** 管理员-产品列表查询*/public static final String ADMIN_PRODUCT_LIST = "admin_product_list";/*** 管理员-产品详情*/public static final String ADMIN_PRODUCT_DETAIL = "admin_product_detail";}
- 权限也可以不定义为常量,看项目情况
1.2 定义权限的注解 RequiredPermission.java
@Target({ElementType.TYPE, ElementType.METHOD}) @Retention(RetentionPolicy.RUNTIME) @Inherited @Documented public @interface RequiredPermission {String value(); }
- ElementType.TYPE,ElementType.METHOD表示注解可以标记类和方法
1.3 权限拦截器 SecurityInterceptor.java
public class SecurityInterceptor implements HandlerInterceptor {@Autowiredprivate AdminUserService adminUserService;@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {// 验证权限if (this.hasPermission(handler)) {return true;}// null == request.getHeader("x-requested-with") TODO 暂时用这个来判断是否为ajax请求// 如果没有权限 则抛403异常 springboot会处理,跳转到 /error/403 页面response.sendError(HttpStatus.FORBIDDEN.value(), "无权限");return false;}/*** 是否有权限** @param handler* @return*/private boolean hasPermission(Object handler) {if (handler instanceof HandlerMethod) {HandlerMethod handlerMethod = (HandlerMethod) handler;// 获取方法上的注解RequiredPermission requiredPermission = handlerMethod.getMethod().getAnnotation(RequiredPermission.class);// 如果方法上的注解为空 则获取类的注解if (requiredPermission == null) {requiredPermission = handlerMethod.getMethod().getDeclaringClass().getAnnotation(RequiredPermission.class);}// 如果标记了注解,则判断权限if (requiredPermission != null && StringUtils.isNotBlank(requiredPermission.value())) {// redis或数据库 中获取该用户的权限信息 并判断是否有权限Set<String> permissionSet = adminUserService.getPermissionSet();if (CollectionUtils.isEmpty(permissionSet) ){return false;}return permissionSet.contains(requiredPermission.value());}}return true;}@Overridepublic void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {// TODO }@Overridepublic void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {// TODO } }
1.4 拦截器注入的配置 MVCConfig.java
@Configuration public class MVCConfig extends WebMvcConfigurerAdapter {@Beanpublic SecurityInterceptor securityInterceptor() {return new SecurityInterceptor();}@Overridepublic void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(securityInterceptor()).excludePathPatterns("/static/*").excludePathPatterns("/error").addPathPatterns("/**");}}
- springboot中注入拦截器
1.5 ProductController.java
@Controller @RequestMapping("/product") // @PermissionConstants.ADMIN_PRODUCT_MANAGEMENT public class ProductController {/*** 产品列表** @return*/@RequestMapping("/list")@RequiredPermission(PermissionConstants.ADMIN_PRODUCT_LIST) // 权限注解public String list() {// 省略产品列表查询逻辑return "/product/list";}/*** 产品详情** @return*/@RequestMapping("/detail")@RequiredPermission(PermissionConstants.ADMIN_PRODUCT_DETAIL) // 权限注解public String detail() {// 省略查询产品详情的逻辑return "/product/edit";}/*** 删除产品** @return*/@RequestMapping("/delete")public String delete() {// 省略删除产品的逻辑return "/product/list";}}
- 如果没有标记权限注解,则不会验证该请求的权限,如/product/delete 请求
转载于:https://www.cnblogs.com/tianlong/p/10310372.html
springboot + 拦截器 + 注解 实现自定义权限验证相关推荐
- SpringBoot 拦截器和AOP自定义注解进行数据拦截实例
声明:本文纯属个人随手笔记,如果对您有参考价值我十分开心,如果有存在错误,或者有更好的解决办法也麻烦您留言告诉我,大家共同成长,切勿恶言相. 欢迎加入资源共享QQ群:275343679,一起发现知识. ...
- struts2学习笔记--拦截器(Interceptor)和登录权限验证Demo
理解 Interceptor拦截器类似于我们学过的过滤器,是可以在action执行前后执行的代码.是我们做web开发是经常使用的技术,比如权限控制,日志.我们也可以把多个interceptor连在一起 ...
- struts2自定义拦截器一——模拟登陆权限验证
1.http://localhost:8083/struts2/user.jsp 表示用户已登陆,存放session对象 2.http://localhost:8083/struts2/quit.js ...
- Spring MVC拦截器实现用户登录权限验证案例
本节将通过拦截器来完成一个用户登录权限验证的 Web 应用 springMVCDemo07,具体要求如下:只有成功登录的用户才能访问系统的主页面main.jsp,如果没有成功登录而直接访问主页面,则拦 ...
- java springmvc权限校验_springmvc拦截器实现用户登录权限验证
实现用户登录权限验证 先看一下我的项目的目录,我是在intellij idea 上开发的 1.先创建一个User类 1 package cn.lzc.po; 2 3 public class User ...
- springboot拦截器实现管理员权限控制功能
思路是这样的,在页面展示中,只显示权限内能使用的功能模块,进入每一个界面都需要拦截器对其进行权限验证,对不能使用的功能使用拦截器进行拦截. 这是主要设计到的三张数据库表格: 这是拦截器: packag ...
- 【SpringBoot】SpringBoot拦截器实战和 Servlet3.0自定义Filter、Listener
=================6.SpringBoot拦截器实战和 Servlet3.0自定义Filter.Listener ============ 1.深入SpringBoot2.x过滤器Fi ...
- SpringBoot使用拦截器实现Restful URL权限拦截
前言 RBAC 是基于角色的访问控制(Role-Based Access Control ).权限管理是在任何一个系统里都无法绕过的问题.没有权限控制管理的系统是非常不安全的. 在Spring框架体系 ...
- springboot拦截器 跳过_springboot创建拦截器过程图解
springboot创建拦截器过程图解 这篇文章主要介绍了springboot创建拦截器过程图解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 一. ...
最新文章
- 元素对应到html源代码,【整理】用Chrome或Chromium查看百度首页中各元素的html源码...
- php 正则获取数字,php结合正则获取字符串中数字的几种方法
- 转:Excel导出问题(导出时不去掉前面的0)
- VUE初始化一个项目
- python-列表包字典的去重
- python基础——经营第一个项目,如何将python学得更6 ?
- ceph_OSD的添加删除
- 正则系列之手机号码正则
- TP5.1导出指定的多个日期的数据记录
- android用出生日期显示星座代码,根据出生日期自动取得星座的js代码
- 004-中国五个城市PM 2.5数据分析
- 推荐一批灵活好用的管理软件
- 格雷希尔G72L系列法兰式密封快速连接器的应用
- 计算机毕业设计SSM大学生校园社团管理系统【附源码数据库】
- ORACLE 年龄计算到月份
- CDQ分治——学习笔记
- 看看人家,才知道长期主义的好处!
- 除铜树脂CH-90NA电镀废水回收硫酸铜技术
- 企业cio(首席信息官)的职责
- 遇到问题--k8s--异常排查--pod重启在执行任务时自动重启的
热门文章
- 新手学python还是c语言_py和c语言究竟新手该学哪个?
- 5 加盐_洗花甲时,别只放盐了!老渔民教您一招,5分钟就搞定,太省事了
- mybatis对mysql if函数_Mybatis使用mysql函数if出现错误
- vmoptions默认配置_AndroidStudio基本配置
- 影响线型缩聚物分子量的因素_【CRPS】通过硼烷引发剂实现氧气引发的超高分子量聚合物的可控合成...
- 如何利用 notedown 完成 ipynb与markdown之间的格式转换?
- 神经网络学习中的SoftMax与交叉熵
- 霍尔开关YS1382检测速度 以及对 智能车竞赛节能组的影响
- 双轴机械臂串口控制命令开发与测试:STM32F103控制板,简易调试命令集合
- 智能车竞赛相关的教高司公函:公函[2005]201号文、教高司[2005]13号