1、注解不生效

在shiro配置类中加上如下代码:

  1.   /**
  2. * Shiro生命周期处理器
  3. */
  4. @Bean(name = "lifecycleBeanPostProcessor")
  5. public static LifecycleBeanPostProcessor getLifecycleBeanPostProcessor() {
  6. return new LifecycleBeanPostProcessor();
  7. }
  8.  
  9. /**
  10. * 开启Shiro的注解(如@RequiresRoles,@RequiresPermissions),需借助SpringAOP扫描使用Shiro注解的类,并在必要时进行安全逻辑验证
  11. */
  12. @Bean
  13. @DependsOn("lifecycleBeanPostProcessor")
  14. public DefaultAdvisorAutoProxyCreator defaultAdvisorAutoProxyCreator() {
  15. DefaultAdvisorAutoProxyCreator creator = new DefaultAdvisorAutoProxyCreator();
  16. creator.setProxyTargetClass(true);
  17. return creator;
  18. }
  19.  
  20.   /**
  21.   * 开启shiro aop注解支持.
  22.   * 使用代理方式;所以需要开启代码支持;
  23.   */
  24.   @Bean
  25.   public AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor(SecurityManager securityManager) {
  26.    AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor = new AuthorizationAttributeSourceAdvisor();
  27.   authorizationAttributeSourceAdvisor.setSecurityManager(securityManager);
  28.    return authorizationAttributeSourceAdvisor;
  29.   }

2、异常处理

过滤器必须要是AuthorizationFilter过滤器才能生效,即只有perms,roles,ssl,rest,port才是属于AuthorizationFilter,而anon,authcBasic,auchc,user是AuthenticationFilter,所以unauthorizedUrl设置后页面不跳转。此处使用springmvc同意异常处理来解决:

  1. package com.example.springbootshiro.controller;
  2.  
  3. import com.example.springbootshiro.constants.CommonConstants;
  4. import com.example.springbootshiro.domain.vo.ResponseVO;
  5. import com.example.springbootshiro.enums.ResponseStatusEnum;
  6. import com.example.springbootshiro.utils.ResultUtil;
  7. import org.apache.shiro.authz.AuthorizationException;
  8. import org.apache.shiro.authz.UnauthorizedException;
  9. import org.slf4j.Logger;
  10. import org.slf4j.LoggerFactory;
  11. import org.springframework.web.bind.annotation.ControllerAdvice;
  12. import org.springframework.web.bind.annotation.ExceptionHandler;
  13. import org.springframework.web.bind.annotation.ResponseBody;
  14.  
  15. import java.lang.reflect.UndeclaredThrowableException;
  16.  
  17. /**
  18. * 统一异常处理类<br>
  19. * 捕获程序所有异常,针对不同异常,采取不同的处理方式
  20. *
  21. */
  22. @ControllerAdvice
  23. public class ExceptionHandleController {
  24. private static final Logger LOGGER = LoggerFactory.getLogger(ExceptionHandleController.class);
  25.  
  26. // @ResponseBody
  27. @ExceptionHandler(UnauthorizedException.class)
  28. public String handleShiroException(Exception ex) {
  29. return "redirect:/error/403";
  30. }
  31.  
  32. // @ResponseBody
  33. @ExceptionHandler(AuthorizationException.class)
  34. public String AuthorizationException(Exception ex) {
  35. return "redirect:/error/401";
  36. }
  37.  
  38. }

具体处理逻辑自己控制

shiro使用注解(@RequiresPermissions等)不无效及异常处理的更多相关文章

  1. shiro添加注解@RequiresPermissions无效

    在学习和使用shiro中,需要整合shiro框架,然后可以在spring中中使用有三种方法,我用的是注解开发这种方式,但是,我加入注解后发现,没什么作用,然后想着肯定是没有注解成功,然后查找资料,发现 ...

  2. shiro添加注解@RequiresPermissions不起作用

    这是因为没有开启spring拦截器,在spring-mvc.xml中加入以下代码就可以了(一定要写在最先加载的xml中,写在后面加载的xml中也不起作用) <bean class="o ...

  3. Shiro 权限注解

      Shiro 权限注解:   Shiro 提供了相应的注解用于权限控制,如果使用这些注解就需要使用AOP 的功能来进行 判断,如Spring AOP:Shiro 提供了Spring AOP 集成用于 ...

  4. Shiro启用注解方式

    shiro验证权限方式一种是基于url配置文件: 例如: <bean id="shiroFilter" class="org.apache.shiro.spring ...

  5. 【shiro】2.spring整合shiro,注解控制shiro用户/角色/权限And/OR,没有权限跳转到固定页面

    这几天粗浅的把shiro整合到spring中,并且注解控制shiro用户/角色/权限And/OR 步骤: 1.首先maven搭建web项目 2.创建数据库 user/role/authority 其中 ...

  6. Shiro权限注解原理

    概述 前不久刚学会使用权限注解(),开始思索了一番.最开始猜测实现方式是注解@Aspect,具体实现方式类似如下所示(切面记录审计日志).后来发现并非如此,所以特地分析一下源码. @Component ...

  7. shiro授权+注解式开发

    shiro授权和注解式开发 1.shiro授权角色.权限 2.Shiro的注解式开发 ShiroUserMapper.xml <select id="getRolesByUserId& ...

  8. SpringBoot Shiro 权限注解不起作用

    最近在学习springboot结合shiro做权限管理时碰到一个问题. 问题如下: 我在userRealm中的doGetAuthorizationInfo方法中给用户添加了权限,然后在Controll ...

  9. 2017.2.13 开涛shiro教程-第十二章-与Spring集成(二)shiro权限注解

    原博客地址:http://jinnianshilongnian.iteye.com/blog/2018398 根据下载的pdf学习. 第十二章-与Spring集成(二)shiro权限注解 shiro注 ...

随机推荐

  1. 12_goto语句的使用

    1.goto是一个关键字,其作用是运行到goto语句进行跳转,立即执行goto后面所对应标签的语句2.结构:goto 标签名(任意起)3.goto语句尽量不要跨函数使用,否则会使代码看起来非常乱,可读 ...

  2. Delphi - 通过WinAPI WinExec直接调用系统工具

    看如下代码: WinExec('mspaint.exe', SW_SHOWNORMAL); // SW_SHOWNORMAL = 1 系统画图 WinExec('write.exe', SW_SHOW ...

  3. SpringBoot第二十四篇:应用监控之Admin

    作者:追梦1819 原文:https://www.cnblogs.com/yanfei1819/p/11457867.html 版权声明:本文为博主原创文章,转载请附上博文链接! 引言   前一章(S ...

  4. UVA10330拆点最大流

    #include <iostream> #include <cstdio> #include <cstring> #include <queue> #i ...

  5. 牛客暑假多校第五场 I vcd

    这个题目一个队友没读懂, 然后我读错了题目, 还让他堆了半天的公式写了半天的代码, 交上去一直0.0, 另一队友问题目有没有读错, 我坚持没有读错, 然后坑了2个小时的时间,不然应该会早一点做出来. ...

  6. HDU 1087 Super Jumping! Jumping! Jumping! 最长递增子序列(求可能的递增序列的和的最大值) *

    Super Jumping! Jumping! Jumping! Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64 ...

  7. Git使用(二)版本库创建及文件修改

    一.创建版本库 1.安装完成后,在开始菜单里找到“Git”->“Git Bash”,蹦出一个类似命令行窗口的东西,就说明Git安装成功! 安装完成后,还需要最后一步设置,在命令行输入: $ gi ...

  8. 【LeetCode】Two Sum II - Input array is sorted

    [Description] Given an array of integers that is already sorted in ascending order, find two numbers ...

  9. 遇到XML-GB2312网页编码的处理方法

    报的错误:encoding error : input conversion failed due to input error, bytes  I/O error : encoder error 1 ...

  10. Python实现语音识别和语音合成

    声音的本质是震动,震动的本质是位移关于时间的函数,波形文件(.wav)中记录了不同采样时刻的位移. 通过傅里叶变换,可以将时间域的声音函数分解为一系列不同频率的正弦函数的叠加,通过频率谱线的特殊分布, ...