SpringBoot整合Shiro的环境搭建教程

2022-12-19 10:04:12

SpringBoot整合Shiro环境搭建

导入 SpringBoot 和 Shiro 整合包的依赖:

<!-- https://mvnrepository.com/artifact/org.apache.shiro/shiro-spring -->
<dependency>
    <groupId>org.apache.shiro</groupId>
    <artifactId>shiro-spring</artifactId>
    <version>1.10.1</version>
</dependency>

下面是编写配置文件:

@Configuration
public class ShiroConfig {
    
}

Shiro 三大要素

    subject -> ShiroFilterFactoryBeansecurityManager -> DefaultWebSecurityManagerrealm

    实际操作中对象创建的顺序 : realm -> securityManager -> subject

    第一步:编写自定义的 realm ,需要继承 AuthorizingRealm,并且重写认证和授权方法:

    public class UserRealm extends AuthorizingRealm {
        @Override
        protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) {
            System.out.println("执行了授权方法");
            return null;
        }
    
        @Override
        protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken) throws AuthenticationException {
            System.out.println("执行了认证方法");
            return null;
        }
    }
    

    注册我们自己的realm到配置类里:

    @Configuration
    public class ShiroConfig {
        @Bean
        public UserRealm userRealm(){
            return new UserRealm();
        }
    }
    

    第二步:创建 securityManager,并加载realm:

    @Bean(name = "SecurityManager")
    public DefaultWebSecurityManager getDefaultWebSecurity(@Qualifier("userRealm") UserRealm userRealm) {
        DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();
        // 需要关联自定义的 Realm,通过参数把 Realm 对象传递过来
        securityManager.setRealm(userRealm);
        return securityManager;
    }
    

    第三步:创建 subject,并关联 securityManager:

    @Bean
    public ShiroFilterFactoryBean shiroFilterFactoryBean(@Qualifier("SecurityManager") DefaultWebSecurityManager defaultWebSecurityManager) {
        ShiroFilterFactoryBean subject = new ShiroFilterFactoryBean();
        // 设置安全管理器
        // 需要关联 securityManager ,通过参数把 securityManager 对象传递过来
        subject.setSecurityManager(defaultWebSecurityManager);
        return subject;
    }
    

    完整配置类:

    @Configuration
    public class ShiroConfig {
    
        @Bean
        public ShiroFilterFactoryBean shiroFilterFactoryBean(@Qualifier("SecurityManager") DefaultWebSecurityManager defaultWebSecurityManager) {
            ShiroFilterFactoryBean subject = new ShiroFilterFactoryBean();
            // 设置安全管理器
            // 需要关联 securityManager ,通过参数把 securityManager 对象传递过来
            subject.setSecurityManager(defaultWebSecurityManager);
            return subject;
        }
    
        @Bean(name = "SecurityManager")
        public DefaultWebSecurityManager getDefaultWebSecurity(@Qualifier("userRealm") UserRealm userRealm) {
            DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();
            // 需要关联自定义的 Realm,通过参数把 Realm 对象传递过来
            securityManager.setRealm(userRealm);
            return securityManager;
        }
    
        @Bean
        public UserRealm userRealm() {
            return new UserRealm();
        }
    }
    

    现在,我们来实现一个简单的页面拦截测试一下吧!

    编写两个页面、在templates目录下新建一个 user 目录 add.html update.html:

    页面内容可以自定义:

    在index页面上,增加跳转链接功能:

    <a th:href="@{/user/add}" rel="external nofollow" >add</a>
    <hr/>
    <a th:href="@{/user/update}" rel="external nofollow" >update</a>
    

    编写跳转到页面的controller:

    @RequestMapping("/user/add")
    public String toAdd() {
        return "user/add";
    }
    
    @RequestMapping("/user/update")
    public String toUpdate() {
        return "user/update";
    }
    

    之后运行无误即可配置成功!

    到此这篇关于SpringBoot整合Shiro的环境搭建教程的文章就介绍到这了,更多相关SpringBoot整合Shiro内容请搜索易采站长站以前的文章或继续浏览下面的相关文章希望大家以后多多支持易采站长站!