首先我们定义一个切入点(匹配com.ed.controller.Seller开头的controller的所有public方法)

  1. @Pointcut("execution(public * com.ed.controller.Seller*.*(..))")
  2. public void checkToken() {}

然后在进入这些方法之前进行token校验

  1. @Before("checkToken()")
  2. public void check() {
  3. ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
  4. HttpServletRequest request = attributes.getRequest();
  5.  
  6. //查询cookie
  7. Cookie cookie = CookieUtil.get(request, CookieConstant.TOKEN);
  8. if (cookie == null) {
  9. log.warn("【token校验】Cookie中查不到token");
  10. throw new SellerAuthorizeException(ResultEnum.TOKEN_ERROR);
  11. }
  12.  
  13. //去redis里查询
  14. String tokenValue = redisTemplate.opsForValue().get(String.format(RedisConstant.TOKEN_PREFIX, cookie.getValue()));
  15. if (StringUtils.isEmpty(tokenValue)) {
  16. log.warn("【token校验】Redis中查不到token");
  17. throw new SellerAuthorizeException(ResultEnum.TOKEN_ERROR);
  18. }
  19. }

抛出的异常可定义一个handler进行拦截,并返回自定义的对象给前端

  1. @ControllerAdvice
  2. public class SellExceptionHandler {
  3. @ExceptionHandler(value = SellerAuthorizeException.class)
  4. @ResponseBody
  5. public ResultVO handlerSellerException(SellerAuthorizeExceptione) {
  6. return ResultVOUtil.error(e.getCode(), e.getMessage());
  7. }
  8.  
  9. }

CookieUtil方法

  1. /**
  2. * 获取cookie
  3. * @param request
  4. * @param name
  5. * @return
  6. */
  7. public static Cookie get(HttpServletRequest request,
  8. String name) {
  9. Map<String, Cookie> cookieMap = readCookieMap(request);
  10. if (cookieMap.containsKey(name)) {
  11. return cookieMap.get(name);
  12. }else {
  13. return null;
  14. }
  15. }
  16.  
  17. /**
  18. * 将cookie封装成Map
  19. * @param request
  20. * @return
  21. */
  22. private static Map<String, Cookie> readCookieMap(HttpServletRequest request) {
  23. Map<String, Cookie> cookieMap = new HashMap<>();
  24. Cookie[] cookies = request.getCookies();
  25. if (cookies != null) {
  26. for (Cookie cookie: cookies) {
  27. cookieMap.put(cookie.getName(), cookie);
  28. }
  29. }
  30. return cookieMap;
  31. }

使用AOP进行权限验证的更多相关文章

  1. SpringAOP01 利用AOP实现权限验证、利用权限验证服务实现权限验证

    1 编程范式 1.1 面向过程 1.2 面向对象 1.3 面向切面编程 1.4 函数式编程 1.5 事件驱动编程 2 什么是面向切面编程 2.1 是一种编程范式,而不是一种编程语言 2.2 解决一些特 ...

  2. 基于springboot通过自定义注解和AOP实现权限验证

    一.移入依赖 <parent> <groupId>org.springframework.boot</groupId> <artifactId>spri ...

  3. AOP拦截+权限验证+返回默认接口对象

    接口如:public IList<string> TestAOP(string token); public IMethodReturn Invoke(IMethodInvocation ...

  4. 从零开始学 Java - Spring AOP 实现用户权限验证

    每个项目都会有权限管理系统 无论你是一个简单的企业站,还是一个复杂到爆的平台级项目,都会涉及到用户登录.权限管理这些必不可少的业务逻辑.有人说,企业站需要什么权限管理阿?那行吧,你那可能叫静态页面,就 ...

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

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

  6. Spring,AOP实现功能级别权限验证

    1. 首先是问题出现的原因 对于一个我的一个个人博客网站,我希望游客可以浏览我的博客,但是评论功能是需要登录才能使用 这就需要对某个功能进行权限验证 对于过滤器,拦截器,AOP的区别日后再讨论,现在是 ...

  7. struts2学习笔记--拦截器(Interceptor)和登录权限验证Demo

    理解 Interceptor拦截器类似于我们学过的过滤器,是可以在action执行前后执行的代码.是我们做web开发是经常使用的技术,比如权限控制,日志.我们也可以把多个interceptor连在一起 ...

  8. Spring MVC 使用拦截器优雅地实现权限验证功能

    在上一篇 SpringAOP 实现功能权限校验功能 中虽然用AOP通过抛异常,请求转发等勉强地实现了权限验证功能,但感觉不是那么完美,应该用拦截器来实现才是最佳的,因为拦截器就是用来拦截请求的,在请求 ...

  9. C# MVC权限验证

    前言 之前一直没怎么接触过权限验证这块,刚好公司老平台改版,就有了这篇权限验证.此篇文章大致讲解下 精确到按钮级别的验证如何实现.以及权限验证设计的参考思路(菜鸟一枚,大神勿喷). 在开发大项目的时候 ...

随机推荐

  1. 模板 - 数学 - 数论 - 扩展Euler定理

    费马(Fermat)小定理 当 \(p\) 为质数,则 \(a^{p-1}\equiv 1 \mod p\) 反之,费马小定理的逆定理不成立,这样的数叫做伪质数,最小的伪质数是341. 欧拉(Eule ...

  2. Mysql插入多条数据测试

    --新建存储过程 create procedure doinsert3() begin declare i int; declare j int; set i = 0; set j = 0; whil ...

  3. 【CSP模拟赛】独立集(最长上升子序列&大力猜结论)

    题目描述 有一天,一个名叫顺旺基的程序员从石头里诞生了.又有一天,他学会了冒泡排序和独 立集.在一个图里,独立集就是一个点集,满足任意两个点之间没有边.于是他就想把这两 个东西结合在一起.众所周知,独 ...

  4. 深度学习面试题17:VGGNet(1000类图像分类)

    目录 VGGNet网络结构 论文中还讨论了其他结构 参考资料 2014年,牛津大学计算机视觉组(Visual Geometry Group)和Google DeepMind公司的研究员一起研发出了新的 ...

  5. 在Kaggle免费使用GPU训练自己的神经网络

    Kaggle上有免费供大家使用的GPU计算资源,本文教你如何使用它来训练自己的神经网络. Kaggle是什么 Kaggle是一个数据建模和数据分析竞赛平台.企业和研究者可在其上发布数据,统计学者和数据 ...

  6. 【转】反编译获取任何微信小程序源码(完)

    一.前言最近在学习微信小程序开发,半个月学习下来,很想实战一下踩踩坑,于是就仿写了一个阿里妈妈淘宝客小程序的前端实现,过程一言难尽,差不多两周时间过去了,发现小程序的坑远比想象的要多的多!!在实际练手 ...

  7. R绘制韦恩图 | Venn图

    解决方案有好几种: 网页版,无脑绘图,就是麻烦,没有写代码方便 极简版,gplots::venn 文艺版,venneuler,不好安装rJava,参见Y叔 酷炫版,VennDiagram 特别注意: ...

  8. vim 外部粘贴代码,如何保持原格式,而不持续缩进

    主要内容:使用“:set paste” 来实现vim 按照源文件格式复制 在vim 使用中偶尔要复制外部代码,常常出现不停缩进的问题: 怎么避免此种情况出现呢 可以在命令模式中使用“:set past ...

  9. 浏览器cookie数 跨站请求伪造 欧盟Cookie指令

    <?php for ($w=0; $w < 200 ; $w++) { setcookie('name'.$w,'value'.$w, time()+3600*10 ); } var_du ...

  10. ntpd服务

    yum -y install ntp 服务器端 [root@ip-172-31-6-148~]# vim /etc/ntp.conf ...# Use public servers from thep ...