12-shiro整合springboot环境搭建(整合shiro)

(1)导入依赖

<!--shiro整合springboot的依赖-->
<dependency>
    <groupId>org.apache.shiro</groupId>
    <artifactId>shiro-spring-boot-starter</artifactId>
    <version>1.5.3</version>
</dependency>

(2)编写shiro的配置类

package com.study.springboot_jsp_shiro.config;

import com.study.springboot_jsp_shiro.shiro.realms.CustomerRealm;
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;

/**
 * 用来整合shiro框架相关的配置类
 */
@Configuration
public class ShiroConfig {
    //1、创建shiroFilter  //负责拦截所有请求
    //shiroFilter要使用安全管理器,我们可以使用参数的方式,就会自动到工厂中找我们已经创建好的安全管理器
    @Bean
    public ShiroFilterFactoryBean getShiroFilterFactoryBean(DefaultWebSecurityManager defaultWebSecurityManager){
        ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean();

        //给filter设置安全管理器
        shiroFilterFactoryBean.setSecurityManager(defaultWebSecurityManager);

        return shiroFilterFactoryBean;
    }

    //2、创建安全管理器,我们这里不可以再创建SecurityManager了,因为SecurityManager没有web容器的特性
    //SecurityManager要使用realm,我们可以使用参数的方式,就会自动到工厂中找我们已经创建好的realm
    @Bean
    public DefaultWebSecurityManager getDefaultWebSecurityManager(Realm realm){
        DefaultWebSecurityManager defaultWebSecurityManager = new DefaultWebSecurityManager();

        //给安全管理器设置realm
        defaultWebSecurityManager.setRealm(realm);

        return defaultWebSecurityManager;
    }

    //3、创建自定义的realm
    @Bean
    public Realm getRealm(){
        CustomerRealm customerRealm = new CustomerRealm();
        return customerRealm;
    }
}

(3)编写我们自定义的realm

package com.study.springboot_jsp_shiro.shiro.realms;

import org.apache.shiro.authc.AuthenticationException;
import org.apache.shiro.authc.AuthenticationInfo;
import org.apache.shiro.authc.AuthenticationToken;
import org.apache.shiro.authz.AuthorizationInfo;
import org.apache.shiro.realm.AuthorizingRealm;
import org.apache.shiro.subject.PrincipalCollection;

/**
 * 自定义realm
 */
public class CustomerRealm extends AuthorizingRealm {
    @Override
    protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {
        return null;
    }

    @Override
    protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {
        return null;
    }
}

(4)编写我们的登录页面和主页

由于我们还没有配置受限资源和公共资源,所以以上两个页面可以随便访问。

(5)配置受限资源和公共资源

(6)再次访问index.jsp时,会发现自动跳转到我们的登录页面
因为shiro的默认认证页面路径是我们的login.jsp(可看出shiro和jsp的集成还是相对友好的)
可以通过下面方法修改shiro的默认认证页面路径

posted @ 2021-11-22 13:46  不是孩子了  阅读(144)  评论(0)    收藏  举报