Shiro 配置详解:如何关闭 Shiro 以及代码示例

本文将详细介绍 Shiro 的配置过程,包括 ShiroFilterFactoryBean 和 SecurityManager 的设置方法,并提供关闭 Shiro 的具体方法和代码示例,帮助你更好地理解和使用 Shiro 框架。

Shiro 配置代码示例

package com.kj.shiro;

import org.apache.shiro.mgt.SecurityManager;
import org.apache.shiro.realm.Realm;
import org.apache.shiro.spring.web.ShiroFilterFactoryBean;
import org.apache.shiro.web.mgt.DefaultWebSecurityManager;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.util.LinkedHashMap;
import java.util.Map;

/**
 * @author 破晓
 * @date 2022-01-22 22:15
 */
@Configuration
public class ShiroConfig {

    @Bean
    public ShiroFilterFactoryBean shiroFilterFactoryBean(SecurityManager securityManager) {
        ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean();
        shiroFilterFactoryBean.setSecurityManager(securityManager);
        // 设置默认登录的 URL,身份认证失败会访问该 URL
        shiroFilterFactoryBean.setLoginUrl("/login");
        // 设置成功之后要跳转的链接
        shiroFilterFactoryBean.setSuccessUrl("/");
        // 设置未授权界面,权限认证失败会访问该 URL
        shiroFilterFactoryBean.setUnauthorizedUrl("/unauthorized");

        // LinkedHashMap 是有序的,进行顺序拦截器配置
        Map<String, String> filterChainMap  = new LinkedHashMap<>();
        /*
               1). anon 可以被匿名访问
               2). authc 必须认证(登录)后才可以访问
               ......
        */
        filterChainMap.put("/**","anon");
        shiroFilterFactoryBean.setFilterChainDefinitionMap(filterChainMap);
        return shiroFilterFactoryBean;
    }

    @Bean
    public SecurityManager securityManager(Realm singleRealm){
        DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager(singleRealm);
        return securityManager;
    }
}

如何关闭 Shiro

要关闭 Shiro,需要进行以下操作:

  1. 将 ShiroFilterFactoryBean 的 filterChainDefinitionMap 设置为 null 或空 Map:

    shiroFilterFactoryBean.setFilterChainDefinitionMap(null); // 或 filterChainDefinitionMap.clear();
    
  2. 将 SecurityManager 设置为 null:

    shiroFilterFactoryBean.setSecurityManager(null);
    
  3. 将 ShiroConfig 类所在的包从扫描范围中移除:

    这可以通过在 Spring 配置文件中设置 exclude-filter 来实现,这样 Shiro 就不会被加载和使用了。

    <context:component-scan base-package="com.kj.shiro" exclude-filter="org.springframework.context.annotation.ComponentScan.Filter(type=org.springframework.context.annotation.FilterType.ASSIGNABLE_TYPE, value=com.kj.shiro.ShiroConfig.class)"/>
    

通过以上操作,就可以成功关闭 Shiro 框架。

Shiro 配置详解:如何关闭 Shiro 以及代码示例

原文地址: https://www.cveoy.top/t/topic/nFaP 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录