博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
springboot整合shiro使用shiro-spring-boot-web-starter
阅读量:7290 次
发布时间:2019-06-30

本文共 3019 字,大约阅读时间需要 10 分钟。

此文章仅仅说明在springboot整合shiro时的一些坑,并不是教程

增加依赖

org.apache.shiro
shiro-spring-boot-web-starter
1.4.0-RC2

配置三个必须的Bean

  1. Realm
    用于授权和登录
@Bean        public Realm realm() {            //创建自己的Realm实例            return new UserRealm();        }
  1. ShiroFilterChainDefinition
    用于实现权限
DefaultShiroFilterChainDefinition chainDefinition = new DefaultShiroFilterChainDefinition();                // 三种方式实现定义权限路径        // 第一种:使用角色名定义        chainDefinition.addPathDefinition("/admin/**", "authc, roles[admin]");        // 第二种:使用权限code定义        chainDefinition.addPathDefinition("/docs/**", "authc, perms[document:read]");        // 第三种:使用接口的自定义配置(此处配置之后需要在对应的接口使用@RequiresPermissions(""))        chainDefinition.addPathDefinition("/**", "authc");        return chainDefinition;
  1. CacheManager
    缓存管理
@Bean        protected CacheManager cacheManager() {            return new MemoryConstrainedCacheManager();        }

还有一些配置,可以在配置文件中配置,具体配置项见


以下内容是为了实现前后端分离,配置shiro拦截器实现返回401状态码的需求

编写拦截器类

public class FormLoginFilter extends PathMatchingFilter {    @Override    protected boolean onPreHandle(ServletRequest request, ServletResponse response, Object mappedValue) throws Exception {        Subject subject = SecurityUtils.getSubject();        boolean isAuthenticated = subject.isAuthenticated();        if (!isAuthenticated) {            HttpServletResponse resp = (HttpServletResponse) response;            resp.setStatus(HttpServletResponse.SC_UNAUTHORIZED);            resp.getWriter().print("NO AUTH!");            return false;        }        return true;    }}

在之前配置的三个Bean的基础上多配置一个BeanShiroFilterFactoryBean

@Bean    public ShiroFilterFactoryBean shiroFilter(SecurityManager securityManager) {        ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean();        // 必须设置SecuritManager        shiroFilterFactoryBean.setSecurityManager(securityManager);        Map
filters = shiroFilterFactoryBean.getFilters(); //配置拦截器,实现无权限返回401,而不是跳转到登录页 filters.put("authc", new FormLoginFilter()); // 如果不设置默认会自动寻找Web工程根目录下的"/login.jsp"页面 shiroFilterFactoryBean.setLoginUrl("/login"); // 登录成功后要跳转的链接 shiroFilterFactoryBean.setSuccessUrl("/index"); // 未授权界面; shiroFilterFactoryBean.setUnauthorizedUrl("/403"); // 拦截器 Map
filterChainDefinitionMap = new LinkedHashMap
(); // 过滤链定义,从上向下顺序执行,一般将 /**放在最为下边 // authc:所有url都必须认证通过才可以访问; anon:所有url都都可以匿名访问 filterChainDefinitionMap.put("/**", "authc"); shiroFilterFactoryBean.setFilterChainDefinitionMap(filterChainDefinitionMap); return shiroFilterFactoryBean; }

此处配置了过滤链,上面三个必须的Bean中修改其中的ShiroFilterChainDefinition

@Bean    public ShiroFilterChainDefinition shiroFilterChainDefinition() {        //不需要在此处配置权限页面,因为上面的ShiroFilterFactoryBean已经配置过,但是此处必须存在,因为shiro-spring-boot-web-starter或查找此Bean,没有会报错        return new DefaultShiroFilterChainDefinition();;    }

转载地址:http://wacjm.baihongyu.com/

你可能感兴趣的文章
Gliffy
查看>>
[51单片机] 以PWM控制直流电机为例建一个简单的51工程框架
查看>>
随记MySQL的时间差函数(TIMESTAMPDIFF、DATEDIFF)、日期转换计算函数(date_add、day、date_format、str_to_date)...
查看>>
左求值表达式,堆栈,调试陷阱与ORM查询语言的设计
查看>>
spring源码分析之spring-jdbc模块详解
查看>>
STM32的USART DMA传输(转)
查看>>
mac 刻录ISO系统盘
查看>>
Genymotion中SD卡目录在Eclipse中查看,以及创建SDCard
查看>>
BZOJ 2298: [HAOI2011]problem a 动态规划
查看>>
精度与分辨率是一回事吗
查看>>
徕卡×天猫超级品牌日 全球奢侈大牌的中国互联网之路
查看>>
奇葩说为小米开专场,Max2的续航能力真的那么强大吗?
查看>>
芝麻信用又有大动作!让外国公司也流口水的免押金新形态来了
查看>>
哪些你知道或不知道的css,在这里或许都齐全
查看>>
技术周刊(2019-01-07 CSS 动画 )
查看>>
runtime?虐我千百遍==、
查看>>
centos下实现pm2自动化部署
查看>>
JavaScript之this详解
查看>>
苹果Facetime支持32人视频通话,一年前,即构科技已经做到了
查看>>
免费SSL证书Let’s Encrypt安装使用教程
查看>>