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实现功能级别权限验证的更多相关文章

  1. Spring AOP 实现功能权限校验功能

    版权声明:本文为博主原创文章,未经博主允许不得转载.   目录(?)[-] 使用拦截器实现未登录时跳转到登录界面的功能 1 拦截器SecurityInterceptor 2spring-mvcxml拦 ...

  2. Spring aop 拦截自定义注解+分组验证参数

    import com.hsq.common.enums.ResponseState;import com.hsq.common.response.ResponseVO;import org.aspec ...

  3. 基于 Annotation 拦截的 Spring AOP 权限验证方法

    基于 Annotation 拦截的 Spring AOP 权限验证方法 转自:http://www.ibm.com/developerworks/cn/java/j-lo-springaopfilte ...

  4. django-个人博客登录及权限验证功能的实现

    完成注册后随即开始进行登录,登录后页面显示登录者的名称 实现如下: 前端页面html,对session进行判断,有值则显示登录者的名字 ,无值则显示注册字样: 后台views函数  首先对验证码进行验 ...

  5. Spring入门(十):Spring AOP使用讲解

    1. 什么是AOP? AOP是Aspect Oriented Programming的缩写,意思是:面向切面编程,它是通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术. 可以认为AOP是 ...

  6. Spring AOP介绍与使用

    Spring AOP介绍与使用 AOP:Aspect Oriented Programming 面向切面编程 OOP:Object Oriented Programming 面向对象编程 ​ 面向切面 ...

  7. 【Spring】Spring AOP实现原理

    Spring AOP实现原理 在之前的一文中介绍过Spring AOP的功能使用,但是没有深究AOP的实现原理,今天正好看到几篇好文,于是就自己整理了一下AOP实现的几种方式,同时把代理模式相关知识也 ...

  8. Spring AOP: Spring之面向方面编程

    Spring AOP: Spring之面向方面编程 面向方面编程 (AOP) 提供从另一个角度来考虑程序结构以完善面向对象编程(OOP). 面向对象将应用程序分解成 各个层次的对象,而AOP将程序分解 ...

  9. spring AOP 之四:@AspectJ切入点标识符语法详解

    @AspectJ相关文章 <spring AOP 之二:@AspectJ注解的3种配置> <spring AOP 之三:使用@AspectJ定义切入点> <spring ...

随机推荐

  1. 【springboot】知识点总结

    [springboot 基础编] 01.SpringBoot>01 - 第一个应用–HelloWorld 02.SpringBoot>02 - 整合 MyBatis 03.SpringBo ...

  2. Linux虚拟机系统中进行redis的哨兵模式配置

    一.配置步骤 开一台虚拟机1.创建三个redis配置文件:/etc/redis下pidfile "/var/run/redis6380.pid" redis的id号port 638 ...

  3. C#设计模式---观察者模式(Observer Pattern)

    一.目的 提供一种一对多的关系,当主题发生变化时候,可以通知所有关联的对象. 二.定义 观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象,这个主题对象在状态发生变化时,会通 ...

  4. Semaphore 的使用思路

    转自:https://www.cnblogs.com/klbc/p/9500947.html 最近在看一本书<Java并发编程 核心方法与框架>,打算一边学习一边把学习的经验记下来,所粘贴 ...

  5. java activity工作流

    java activity工作流 参考资料: 1.https://blog.csdn.net/jiangyu1013/article/details/73250902 2.https://blog.c ...

  6. Sentinel限流、降级配置详解

    安装Sentinel 下载sentinel-dashboard-1.8.2.jar 安装有jdk环境,8080端口未被占用 在jar包所在目录打开cmd,输入命令启动:java -jar sentin ...

  7. js与jquery获取input输入框中的值

    如何用javascript获取input输入框中的值,js/jq通过name.id.class获取input输入框中的value 先准备一段 HTML 一.jquery获取input文本框中的值 通过 ...

  8. python 修改图像大小和分辨率

    1 概念: 分辨率,指的是图像或者显示屏在长和宽上各拥有的像素个数.比如一张照片分辨率为1920x1080,意思是这张照片是由横向1920个像素点和纵向1080个像素点构成,一共包含了1920x108 ...

  9. Appium问题解决方案(7)- Could not find 'adb.exe' in PATH. Please set the ANDROID_HOME environment variable with the Android SDK root directory path

    背景:运行代码提示找不到ADB An unknown server-side error occurred while processing the command. Original error: ...

  10. throws声明异常中断式处理异常

    1.throws 编译期异常,一直往上抛最后是JVM处理(打印并中断程序) 2.声明多个或者直接声明父类