Spring,AOP实现功能级别权限验证
1. 首先是问题出现的原因
对于一个我的一个个人博客网站,我希望游客可以浏览我的博客,但是评论功能是需要登录才能使用
这就需要对某个功能进行权限验证
对于过滤器,拦截器,AOP的区别日后再讨论,现在是功能的实现
2. 具体实现
我希望对于标注了注解的方法上都进行功能权限验证
我们哪一个员工管理进行示例
对于删除方法我们进行权限验证,如果登陆,则能删除,否则不能删除
1. 首先创建一个注解
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface SecurityCheck {
}
2. 接下来创建一个切面类
@Aspect
@Component
public class SecurityAspect {
@Pointcut("@annotation(com.xj.annotation.SecurityCheck)")
public void pointCut() {
}
@Around("pointCut()")
public Object checkSecurity(ProceedingJoinPoint joinPoint) {
System.out.println("checkSecurity");
try {
//获取session对象,至于RequestContextHolder是什么,为什么能获取request对象,我之后会再讨论
RequestAttributes requestAttributes = RequestContextHolder.currentRequestAttributes();
HttpServletRequest request = ((ServletRequestAttributes) requestAttributes).getRequest();
HttpSession session = request.getSession();
String user = (String) session.getAttribute("user");
if ("1".equals(user)) {
return joinPoint.proceed();
} else {
return Message.fail().add("va_msg","权限不够");
}
} catch (Throwable throwable) {
throwable.printStackTrace();
return Message.fail().add("va_msg","发生错误");
}
}
}
3. 为需要被验证的方法上加注解
@SecurityCheck
@RequestMapping(value = "/emp/{ids}", method = RequestMethod.DELETE)
@ResponseBody
public Message deleteEmp(@PathVariable("ids") String ids){
//以下是删除的逻辑,这里就不展示了
....
return Message.success();
}
4. 之后在扫描了Controller组件的容器中,开启基于注解的AOP模式
注意:对于我的ssm项目来说,我的spring与springmvc容器是分开的,spring扫描除了Controller注解的类,springmvc值扫描Controller注解的类
所以如果你想对其他类的方法进行权限验证,例如Service中的一个功能进行验证,就需要在spring的配置文件中也加上以下配置
<aop:aspectj-autoproxy/>
5. 测试
如果未登录

如果登陆

Spring,AOP实现功能级别权限验证的更多相关文章
- Spring AOP 实现功能权限校验功能
版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[-] 使用拦截器实现未登录时跳转到登录界面的功能 1 拦截器SecurityInterceptor 2spring-mvcxml拦 ...
- Spring aop 拦截自定义注解+分组验证参数
import com.hsq.common.enums.ResponseState;import com.hsq.common.response.ResponseVO;import org.aspec ...
- 基于 Annotation 拦截的 Spring AOP 权限验证方法
基于 Annotation 拦截的 Spring AOP 权限验证方法 转自:http://www.ibm.com/developerworks/cn/java/j-lo-springaopfilte ...
- django-个人博客登录及权限验证功能的实现
完成注册后随即开始进行登录,登录后页面显示登录者的名称 实现如下: 前端页面html,对session进行判断,有值则显示登录者的名字 ,无值则显示注册字样: 后台views函数 首先对验证码进行验 ...
- Spring入门(十):Spring AOP使用讲解
1. 什么是AOP? AOP是Aspect Oriented Programming的缩写,意思是:面向切面编程,它是通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术. 可以认为AOP是 ...
- Spring AOP介绍与使用
Spring AOP介绍与使用 AOP:Aspect Oriented Programming 面向切面编程 OOP:Object Oriented Programming 面向对象编程 面向切面 ...
- 【Spring】Spring AOP实现原理
Spring AOP实现原理 在之前的一文中介绍过Spring AOP的功能使用,但是没有深究AOP的实现原理,今天正好看到几篇好文,于是就自己整理了一下AOP实现的几种方式,同时把代理模式相关知识也 ...
- Spring AOP: Spring之面向方面编程
Spring AOP: Spring之面向方面编程 面向方面编程 (AOP) 提供从另一个角度来考虑程序结构以完善面向对象编程(OOP). 面向对象将应用程序分解成 各个层次的对象,而AOP将程序分解 ...
- spring AOP 之四:@AspectJ切入点标识符语法详解
@AspectJ相关文章 <spring AOP 之二:@AspectJ注解的3种配置> <spring AOP 之三:使用@AspectJ定义切入点> <spring ...
随机推荐
- 【C/C++】C/C++中的内存四区
1 代码区 存放 CPU 执行的机器指令.通常代码区是可共享的(即另外的执行程序可以调用它),使其可共享的目的是对于频繁被执行的程序,只需要在内存中有一份代码即可.代码区通常是只读的,使其只读的原因是 ...
- C# 单元测试,测试资源管理器里面没有需要的单元测试
已经创建了单元测试,却无法运行,更改引用的程序集,将TestPlatform换位QualityTools.UnitTestFramework.具体原因尚未分析,随笔记录.
- 跨域@RequestBody@RequestParam 和JSON.stringify
- 解锁 VS Code 更多可能性,轻松入门 WebView
作者:HelloGitHub-小夏 说起 VS Code 大家普遍印象应该都差不多是这样:不就是个编辑器嘛,最主要的还是 coding 的快感咯. 里面很多功能都应该是围绕如何提高 coding 效率 ...
- 树莓派4B切换国内源-亲测有效
参考:https://blog.csdn.net/qq_30290661/article/details/103386997 修改/etc/apt/sources.list,去掉自带的源,添加如下源: ...
- 大厂的 SDK 写法,偷学到了!
自己动手写 SDK 的经验技巧分享 大家好,我是鱼皮. 最近因为工作需要,自己动手写了一些项目的通用 SDK.在编写的过程中,我阅读和参考了不少公司中其他大佬写的 SDK,也总结了一些开发 SDK 的 ...
- Java基础之SPI机制
SPI 机制,全称为 Service Provider Interface,是一种服务发现机制.它通过在 ClassPath 路径下的 META-INF/services 文件夹查找文件,自动加载文件 ...
- HashSet的存储原理
HashSet的底层用哈希散列表来存储对象(默认长度为16的数组),假如: Set set=new HashSet(); set.add(obj); 内部存储过程为:定义h=obj.hashCode, ...
- WEB漏洞——SQL
由于我的博客是学到渗透的时候才做的,没有关于WEB漏洞的笔记,现在发现WEB层面的漏洞有些不太熟悉了,边写一下笔记边复习一下,就从sql注入开始吧 话不多说先上大佬写的表[ctfhub]SQL注入 - ...
- github搜索技巧小结
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...